jdbc java_SpringBoot打包

jdbc java_SpringBoot打包一、SpringBootDataJPA介绍  SpringData:其实SpringData就是Spring提供了一个操作数据的框架。而SpringDataJPA只是SpringData框架下的一个基于JPA标准操作数据的模块。  SpringDataJPA:基于JPA的标准数据进行操作。简化操作持久层的代码。只需要编写接口就可以。  二、SpringBoot整…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

一、SpringBootData JPA介绍
  SpringData:其实SpringData就是Spring提供了一个操作数据的框架。而SpringData JPA只是SpringData框架下的一个基于JPA标准操作数据的模块。
  SpringData JPA:基于JPA的标准数据进行操作。简化操作持久层的代码。只需要编写接口就可以。
 
 
二、SpringBoot整合SpringData JPA
 
1、导入maven依赖
 在原有的SprigBoot的maven依赖的基础下加上JPA的依赖
在这里插入图片描述
 
2、application.properties文件中添加配置
在这里插入图片描述
 
3、实体类

import javax.persistence.*;

@Entity
@Table(name="t_users")
public class Users {

	@Id	//主键id
	@GeneratedValue(strategy=GenerationType.IDENTITY)//主键生成策略
	@Column(name="id")//数据库字段名
	private Integer id;
	
	@Column(name="name")
	private String name;
	
	@Column(name="age")
	private Integer age;
	
	@Column(name="address")
	private String address;

	@ManyToOne(cascade = CascadeType.PERSIST)	//表示多方
	@JoinColumn(name ="role_id")	//维护一个外键,外键在Users一侧
	private Roles roles;

	public Roles getRoles() {
		return roles;
	}

	public void setRoles(Roles roles) {
		this.roles = roles;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	@Override
	public String toString() {
		final StringBuffer sb = new StringBuffer("Users{");
		sb.append("id=").append(id);
		sb.append(", name='").append(name).append('\'');
		sb.append(", age=").append(age);
		sb.append(", address='").append(address).append('\'');
		sb.append(", roles=").append(roles);
		sb.append('}');
		return sb.toString();
	}
}

 
4、编写Dao接口

import org.springframework.data.jpa.repository.JpaRepository;

import com.bjsxt.pojo.Users;
/**
 * 参数一 T :当前需要映射的实体
 * 参数二 ID :当前映射的实体中的OID的类型
 *
 */
public interface UsersRepository extends JpaRepository<Users,Integer> {

}

 
6、在pom文件中添加测试启动器的坐标
在这里插入图片描述
 
7、测试
在这里插入图片描述

 
 
三、SpringBoot JPA提供的核心接口
 
 1、Repository接口
 2、CrudRepository接口
 3、PagingAndSortingRepository接口
 4、JpaRepository接口
 5、JPASpecificationExecutor接口
 
 
四、Repository接口的使用
 
 提供了方法名称命名查询方式
 提供了基于@Query注解查询与更新
 
1、dao层接口(方法名称命名查询方式)

import com.bjsxt.pojo.Users;
import org.springframework.data.repository.Repository;

import java.util.List;

/**
 * Repository接口方法名称命名查询
 *
 */
public interface UsersRepositoryByName extends Repository<Users,Integer> {
    //方法名称必须要遵循驼峰式命名规则,findBy(关键字)+属性名称(首字母大写)+查询条件(首字母大写)
    List<Users> findByName(String name);

    List<Users> findByNameAndAge(String name,Integer age);

    List<Users> findByNameLike(String name);

}

 
2、测试

/**
	 * Repository
	 */
	@Test
	public void UsersRepositoryByName(){
		List<Users> list=this.usersRepositoryByName.findByName("张三");
		for (Users users:list){
			System.out.println(users);
		}
	}

	@Test
	public void findByNameAndAge(){
		List<Users> list=this.usersRepositoryByName.findByNameAndAge("张三",20);
		for (Users users:list){
			System.out.println(users);
		}
	}

	@Test
	public void findByNameLike() {
		List<Users> list = this.usersRepositoryByName.findByNameLike("张%");
		for (Users users : list) {
			System.out.println(users);
		}
	}

 
3、dao层接口编写(基于@Query注解查询与更新)

import com.bjsxt.pojo.Users;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;


import java.util.List;

/**
 * 〈一句话功能简述〉<br> 
 *  Repository    @Query
 *
 * @author admin
 * @create 2019/5/22
 * @since 1.0.0
 */
public interface UsersRepositoryQueryAnnotation extends JpaRepository<Users,Integer> {
    @Query("from Users where name = ?")
    List<Users> queryByNameUseHQL(String name);

    @Query(value = "select * from t_user where name=?",nativeQuery = true)
    List<Users> queryByNameUseSQL(String name);

    @Query("update Users set name=? where id=?")
    @Modifying  //需要执行一个更新操作
    void updateUsersNameById(String name,Integer id);

}

 
4、测试

	/**
	 * Repository--@Query测试
	 */
	@Test
	public void testQueryByNameUseSQL() {
		List<Users> list = this.usersRepositoryQueryAnnotation.queryByNameUseSQL("张三");
		for (Users users : list) {
			System.out.println(users);
		}
	}

	/**
	 * Repository--@Query测试
	 */
	@Test
	@Transactional //@Transactional与@Test 一起使用时 事务是自动回滚的。
	@Rollback(false) //取消自动回滚
	public void testUpdateUsersNameById() {
		this.usersRepositoryQueryAnnotation.updateUsersNameById("张三三", 1);
	}

 
 
五、CrudRepository接口的使用
  CrudRepository接口,主要是完成一些增删改查的操作。注意:CrudRepository接口继承了Repository接口
 
1、编写dao层接口

import com.bjsxt.pojo.Users;
import org.springframework.data.repository.CrudRepository;

public interface UsersRepositoryCrudRepository extends CrudRepository<Users,Integer> {
}

 
2、测试

@Test
	public void testCrudRepositorySave() {
		Users users=new Users();
		users.setName("青衫");
		users.setAge(30);
		users.setAddress("湖南怀化");
		this.usersRepositoryCrudRepository.save(users);
	}

	@Test
	public void testCrudRepositoryUpdate() {
		Users users=new Users();
		users.setId(4);
		users.setName("青");
		users.setAge(18);
		users.setAddress("怀化");
		this.usersRepositoryCrudRepository.save(users);
	}

	@Test
	public void testCrudRepositoryFindOne() {

		Users users=this.usersRepositoryCrudRepository.findOne(4);
		System.out.println(users);
	}

	@Test
	public void testCrudRepositoryFindAll() {
		List<Users> list= (List<Users>) this.usersRepositoryCrudRepository.findAll();
		for (Users user:list){
			System.out.println(user);
		}
	}

	@Test
	public void testCrudRepositoryDeleteById() {
		this.usersRepositoryCrudRepository.delete(4);
		
	}

 
 
六、PagingAndSortingRepository接口的使用
 该接口提供了分页与排序的操作,注意:该接口继承了CrudRepository接口
 
1、编写dao层

import com.bjsxt.pojo.Users;
import org.springframework.data.repository.PagingAndSortingRepository;

public interface UsersRepositoryPagingAndSorting extends PagingAndSortingRepository<Users,Integer> {

}

 
2、测试

@Test
	public void testPagingAndSortingRepositorySort() {
		//Order	定义了排序规则
		Sort.Order order=new Sort.Order(Sort.Direction.DESC,"id");
		//Sort对象封装了排序规则
		Sort sort=new Sort(order);
		List<Users> list= (List<Users>) this.usersRepositoryPagingAndSorting.findAll(sort);
		for (Users users:list){
			System.out.println(users);
		}
	}

	@Test
	public void testPagingAndSortingRepositoryPaging() {
		//Pageable:封装了分页的参数,当前页,煤业显示的条数。注意:它的当前页是从0开始
		//PageRequest(page,size):page表示当前页,size表示每页显示多少条
		Pageable pageable=new PageRequest(1,2);
		Page<Users> page=this.usersRepositoryPagingAndSorting.findAll(pageable);
		System.out.println("数据的总条数:"+page.getTotalElements());
		System.out.println("总页数:"+page.getTotalPages());
		List<Users> list=page.getContent();
		for (Users users:list){
			System.out.println(users);
		}
	}

	@Test
	public void testPagingAndSortingRepositorySortAndPaging() {
		Sort sort=new Sort(new Sort.Order(Sort.Direction.DESC,"id"));
		Pageable pageable=new PageRequest(0,2,sort);
		Page<Users> page=this.usersRepositoryPagingAndSorting.findAll(pageable);
		System.out.println("数据的总条数:"+page.getTotalElements());
		System.out.println("总页数:"+page.getTotalPages());
		List<Users> list=page.getContent();
		for (Users users:list){
			System.out.println(users);
		}
	}

 
 
七、JpaRepository接口
 
 该接口继承了PagingAndSortingRepository。对继承的父接口中方法的返回值进行适配。
 
1、dao层接口编写

/**
 * 参数一 T :当前需要映射的实体
 * 参数二 ID :当前映射的实体中的OID的类型
 *
 */
public interface UsersRepository extends JpaRepository<Users,Integer> {

}

 
2、测试

/**
	 * JpaRepository	排序测试
	 */
	@Test
	public void testJpaRepositorySort() {
		//Order	定义了排序规则
		Sort.Order order=new Sort.Order(Sort.Direction.DESC,"id");
		//Sort对象封装了排序规则
		Sort sort=new Sort(order);
		List<Users> list= this.usersRepository.findAll(sort);
		for (Users users:list){
			System.out.println(users);
		}
	}

 
 
八、JPASpecificationExecutor接口
 
 该接口主要是提供了多条件查询的支持,并且可以在查询中添加排序与分页。注意JPASpecificationExecutor是单独存在的。完全独立
 
1、dao层接口编写

import com.bjsxt.pojo.Users;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

/**
 * 〈一句话功能简述〉<br> 
 *  JpaSpecificationExecutor
 *
 * @author admin
 * @create 2019/5/23
 * @since 1.0.0
 */
public interface UserRepositorySpecification extends JpaRepository<Users,Integer>,JpaSpecificationExecutor<Users> {
}

 
2、测试

/**
	 * JpaSpecificationExecutor		单条件查询
	 */
	@Test
	public void testJpaSpecificationExecutor1() {
		/**
		 * Specification:用于封装查查询条件
		 */
		Specification<Users> spec=new Specification<Users>() {
			//Predicate:封装了单个查询条件

			/**
			 * @param root		对查询对象属性的封装
			 * @param criteriaQuery	封装了我们要执行的查询中的各个部分的信息,select from order
			 * @param criteriaBuilder	查询条件的构造器
			 * @return
			 */
			@Override
			public Predicate toPredicate(Root<Users> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
				//where name="张三"
				/**
				 * 参数一:查询的属性
				 * 参数二:条件的值
				 */
				Predicate predicate=criteriaBuilder.equal(root.get("name"),"张三");
				return predicate;
			}
		};
		List<Users> list=this.userRepositorySpecification.findAll(spec);
		for (Users users:list){
			System.out.println(users);
		}
	}

	/**
	 * JpaSpecificationExecutor		多条件查询方式一
	 */
	@Test
	public void testJpaSpecificationExecutor2() {
		/**
		 * Specification:用于封装查查询条件
		 */
		Specification<Users> spec=new Specification<Users>() {
			//Predicate:封装了单个查询条件

			/**
			 * @param root		对查询对象属性的封装
			 * @param criteriaQuery	封装了我们要执行的查询中的各个部分的信息,select from order
			 * @param criteriaBuilder	查询条件的构造器
			 * @return
			 */
			@Override
			public Predicate toPredicate(Root<Users> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
				//where name="张三" and age=20
				/**
				 * 参数一:查询的属性
				 * 参数二:条件的值
				 */
				List<Predicate> list=new ArrayList<>();
				list.add(criteriaBuilder.equal(root.get("name"),"张三"));
				list.add(criteriaBuilder.equal(root.get("age"),20));
				Predicate[] arr=new Predicate[list.size()];
				return criteriaBuilder.and(list.toArray(arr));
			}
		};
		List<Users> list=this.userRepositorySpecification.findAll(spec);
		for (Users users:list){
			System.out.println(users);
		}
	}

	/**
	 * JpaSpecificationExecutor		多条件查询方式二
	 */
	@Test
	public void testJpaSpecificationExecutor3() {
		/**
		 * Specification:用于封装查查询条件
		 */
		Specification<Users> spec=new Specification<Users>() {
			//Predicate:封装了单个查询条件

			/**
			 * @param root		对查询对象属性的封装
			 * @param criteriaQuery	封装了我们要执行的查询中的各个部分的信息,select from order
			 * @param criteriaBuilder	查询条件的构造器
			 * @return
			 */
			@Override
			public Predicate toPredicate(Root<Users> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
				//where name="张三" and age=20
				/**
				 * 参数一:查询的属性
				 * 参数二:条件的值
				 */
				/*List<Predicate> list=new ArrayList<>();
				list.add(criteriaBuilder.equal(root.get("name"),"张三"));
				list.add(criteriaBuilder.equal(root.get("age"),20));
				Predicate[] arr=new Predicate[list.size()];*/
				//(name='张三' and age=20) or id=2
				return criteriaBuilder.or(criteriaBuilder.and(criteriaBuilder.equal(root.get("name"),"张三"),criteriaBuilder.equal(root.get("age"),20)),criteriaBuilder.equal(root.get("id"),1));
			}
		};

		Sort sort=new Sort(new Sort.Order(Sort.Direction.DESC,"id"));
		List<Users> list=this.userRepositorySpecification.findAll(spec,sort);
		for (Users users:list){
			System.out.println(users);
		}
	}

 
 
九、关联映射操作
 
1、一对多的关联关系
  需求:角色与用户的一对多的关联关系
  角色:一方
  用户:多方
 
2、实体类

import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;

/**
 * 〈一句话功能简述〉<br> 
 * 〈〉
 *
 * @author admin
 * @create 2019/5/23
 * @since 1.0.0
 */
@Entity
@Table(name = "t_roles")
public class Roles {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "role_id")
    private Integer roleId;
    @Column(name = "role_name")
    private String roleName;

    @OneToMany(mappedBy = "roles")
    private Set<Users> users=new HashSet<>();

    public Integer getRoleId() {
        return roleId;
    }

    public void setRoleId(Integer roleId) {
        this.roleId = roleId;
    }

    public String getRoleName() {
        return roleName;
    }

    public void setRoleName(String roleName) {
        this.roleName = roleName;
    }

    public Set<Users> getUsers() {
        return users;
    }

    public void setUsers(Set<Users> users) {
        this.users = users;
    }


}

 

package com.bjsxt.pojo;

import javax.persistence.*;

@Entity
@Table(name="t_users")
public class Users {

	@Id	//主键id
	@GeneratedValue(strategy=GenerationType.IDENTITY)//主键生成策略
	@Column(name="id")
	private Integer id;
	
	@Column(name="name")
	private String name;
	
	@Column(name="age")
	private Integer age;
	
	@Column(name="address")
	private String address;

	@ManyToOne(cascade = CascadeType.PERSIST)	//表示多方
	@JoinColumn(name ="role_id")	//维护一个外键,外键在Users一侧
	private Roles roles;

	public Roles getRoles() {
		return roles;
	}

	public void setRoles(Roles roles) {
		this.roles = roles;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	@Override
	public String toString() {
		final StringBuffer sb = new StringBuffer("Users{");
		sb.append("id=").append(id);
		sb.append(", name='").append(name).append('\'');
		sb.append(", age=").append(age);
		sb.append(", address='").append(address).append('\'');
		sb.append(", roles=").append(roles);
		sb.append('}');
		return sb.toString();
	}
}

 
3、dao层接口编写

/**
 * 参数一 T :当前需要映射的实体
 * 参数二 ID :当前映射的实体中的OID的类型
 *
 */
public interface UsersRepository extends JpaRepository<Users,Integer> {

}

 
4、测试

/**
 * Copyright (C), 2015-2019, XXX有限公司
 * FileName: ManyToManyTest
 * Author:   admin
 * Date:     2019/5/23 14:19
 * Description:
 * History:
 * <author>          <time>          <version>          <desc>
 * 作者姓名           修改时间           版本号              描述
 */
package com.bjsxt.test;

import com.bjsxt.App;
import com.bjsxt.dao.RolesRepository;
import com.bjsxt.pojo.Menus;
import com.bjsxt.pojo.Roles;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.Set;

/**
 * 〈一句话功能简述〉<br> 
 * 多对多的关联关系的测试
 *
 * @author admin
 * @create 2019/5/23
 * @since 1.0.0
 */
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = App.class)
public class ManyToManyTest {

    @Autowired
    private RolesRepository rolesRepository;

    /**
     * 添加测试
     */
    @Test
    public void testSave(){
        //创建角色对象
        Roles roles=new Roles();
        roles.setRoleName("项目经理");
        //创建菜单对象
        Menus menus=new Menus();
        menus.setMenusName("xxxx管理系统");
        menus.setFatherId(0);

        Menus menus2=new Menus();
        menus2.setFatherId(1);
        menus2.setMenusName("项目管理");
        //关联
        roles.getMenus().add(menus);
        roles.getMenus().add(menus2);
        menus.getRoles().add(roles);
        menus2.getRoles().add(roles);
        //保存
        this.rolesRepository.save(roles);
    }

    /**
     * 查询操作
     */
    @Test
    public void testFind(){
        Roles roles=this.rolesRepository.findOne(2);
        System.out.println(roles.getRoleName());
        Set<Menus> menus=roles.getMenus();
        for (Menus menu:menus){
            System.out.println(menu);
        }
    }
}

&nbsp;
5、多对多的关联关系
&nbsp;
 角色与菜单多对多关联关系
 菜单:多方
 角色:多方
 
6、实体类

/**
 * Copyright (C), 2015-2019, XXX有限公司
 * FileName: Menus
 * Author:   admin
 * Date:     2019/5/23 14:06
 * Description:
 * History:
 * <author>          <time>          <version>          <desc>
 * 作者姓名           修改时间           版本号              描述
 */
package com.bjsxt.pojo;

import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;

/**
 * 〈一句话功能简述〉<br> 
 * 〈〉
 *
 * @author admin
 * @create 2019/5/23
 * @since 1.0.0
 */
@Entity
@Table(name = "t_menus")
public class Menus {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "menus_id")
    private Integer menusId;
    @Column(name = "menus_name")
    private String menusName;
    @Column(name = "menus_url")
    private String menusUrl;
    @Column(name = "father_id")
    private Integer fatherId;

    @ManyToMany(mappedBy = "menus")
    private Set<Roles> roles=new HashSet<>();

    public Set<Roles> getRoles() {
        return roles;
    }

    public void setRoles(Set<Roles> roles) {
        this.roles = roles;
    }

    public Integer getMenusId() {
        return menusId;
    }

    public void setMenusId(Integer menusId) {
        this.menusId = menusId;
    }

    public String getMenusName() {
        return menusName;
    }

    public void setMenusName(String menusName) {
        this.menusName = menusName;
    }

    public String getMenusUrl() {
        return menusUrl;
    }

    public void setMenusUrl(String menusUrl) {
        this.menusUrl = menusUrl;
    }

    public Integer getFatherId() {
        return fatherId;
    }

    public void setFatherId(Integer fatherId) {
        this.fatherId = fatherId;
    }

    @Override
    public String toString() {
        final StringBuffer sb = new StringBuffer("Menus{");
        sb.append("menusId=").append(menusId);
        sb.append(", menusName='").append(menusName).append('\'');
        sb.append(", menusUrl='").append(menusUrl).append('\'');
        sb.append(", fatherId=").append(fatherId);
        sb.append('}');
        return sb.toString();
    }
}

 

/**
 * Copyright (C), 2015-2019, XXX有限公司
 * FileName: Roles
 * Author:   admin
 * Date:     2019/5/23 11:02
 * Description:
 * History:
 * <author>          <time>          <version>          <desc>
 * 作者姓名           修改时间           版本号              描述
 */
package com.bjsxt.pojo;

import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;

/**
 * 〈一句话功能简述〉<br> 
 * 〈〉
 *
 * @author admin
 * @create 2019/5/23
 * @since 1.0.0
 */
@Entity
@Table(name = "t_roles")
public class Roles {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "role_id")
    private Integer roleId;
    @Column(name = "role_name")
    private String roleName;

    @OneToMany(mappedBy = "roles")
    private Set<Users> users=new HashSet<>();

    @ManyToMany(cascade = CascadeType.PERSIST,fetch = FetchType.EAGER)
    //映射中间表  joinColumns:当前表中的主键关联中间表的外键
    @JoinTable(name = "t_roles_menus",joinColumns =@JoinColumn(name = "role_id"),inverseJoinColumns = @JoinColumn(name = "menu_id"))
    private Set<Menus> menus=new HashSet<>();

    public Set<Menus> getMenus() {
        return menus;
    }

    public void setMenus(Set<Menus> menus) {
        this.menus = menus;
    }

    public Integer getRoleId() {
        return roleId;
    }

    public void setRoleId(Integer roleId) {
        this.roleId = roleId;
    }

    public String getRoleName() {
        return roleName;
    }

    public void setRoleName(String roleName) {
        this.roleName = roleName;
    }

    public Set<Users> getUsers() {
        return users;
    }

    public void setUsers(Set<Users> users) {
        this.users = users;
    }
}

 
7、dao层接口

/**
 * Copyright (C), 2015-2019, XXX有限公司
 * FileName: RolesRepository
 * Author:   admin
 * Date:     2019/5/23 14:21
 * Description:
 * History:
 * <author>          <time>          <version>          <desc>
 * 作者姓名           修改时间           版本号              描述
 */
package com.bjsxt.dao;

import com.bjsxt.pojo.Roles;
import org.springframework.data.jpa.repository.JpaRepository;

/**
 * 〈一句话功能简述〉<br> 
 * 〈〉
 *
 * @author admin
 * @create 2019/5/23
 * @since 1.0.0
 */
public interface RolesRepository extends JpaRepository<Roles,Integer> {

}

 
8、测试

/**
 * Copyright (C), 2015-2019, XXX有限公司
 * FileName: ManyToManyTest
 * Author:   admin
 * Date:     2019/5/23 14:19
 * Description:
 * History:
 * <author>          <time>          <version>          <desc>
 * 作者姓名           修改时间           版本号              描述
 */
package com.bjsxt.test;

import com.bjsxt.App;
import com.bjsxt.dao.RolesRepository;
import com.bjsxt.pojo.Menus;
import com.bjsxt.pojo.Roles;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.Set;

/**
 * 〈一句话功能简述〉<br> 
 * 多对多的关联关系的测试
 *
 * @author admin
 * @create 2019/5/23
 * @since 1.0.0
 */
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = App.class)
public class ManyToManyTest {

    @Autowired
    private RolesRepository rolesRepository;

    /**
     * 添加测试
     */
    @Test
    public void testSave(){
        //创建角色对象
        Roles roles=new Roles();
        roles.setRoleName("项目经理");
        //创建菜单对象
        Menus menus=new Menus();
        menus.setMenusName("xxxx管理系统");
        menus.setFatherId(0);

        Menus menus2=new Menus();
        menus2.setFatherId(1);
        menus2.setMenusName("项目管理");
        //关联
        roles.getMenus().add(menus);
        roles.getMenus().add(menus2);
        menus.getRoles().add(roles);
        menus2.getRoles().add(roles);
        //保存
        this.rolesRepository.save(roles);
    }

    /**
     * 查询操作
     */
    @Test
    public void testFind(){
        Roles roles=this.rolesRepository.findOne(2);
        System.out.println(roles.getRoleName());
        Set<Menus> menus=roles.getMenus();
        for (Menus menu:menus){
            System.out.println(menu);
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/179794.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 香农编码的gui编码_香农编码

    香农编码的gui编码_香农编码香农编码概念:香农编码是是采用信源符号的累计概率分布函数来分配字码的。香农编码是根据香农第一定理直接得出的,指出了平均码长与信息之间的关系,同时也指出了可以通过编码使平均码长达到极限值。香农第一定理是将原始信源符号转化为新的码符号,使码符号尽量服从等概分布,从而每个码符号所携带的信息量达到最大,进而可以用尽量少的码符号传输信源信息。香农编码属于不等长编码,通常将经常出现的消息变成短码,不经常出现的…

  • spss 13.0 英文正式版14个模块的授权号码

    spss 13.0 英文正式版14个模块的授权号码

  • matlab 求矩阵秩,求Matlab中矩阵的秩和迹 | 学步园[通俗易懂]

    matlab 求矩阵秩,求Matlab中矩阵的秩和迹 | 学步园[通俗易懂]1、Matlab中求矩阵的秩>>a=rand(6)a=0.81470.27850.95720.79220.67870.70600.90580.54690.48540.95950.75770.03180.12700.95750.80030.65570.74310…

  • python 实现协程 提高效率

    python 实现协程 提高效率

    2021年11月11日
  • java gb2312中文乱码_Java中文乱码问题(转)

    java gb2312中文乱码_Java中文乱码问题(转)大家在JSP的开发过程中,经常出现中文乱码的问题,可能一至困扰着大家,现把JSP开发中遇到的中文乱码的问题及解决办法写出来供大家参考。首先了解一下Java中文问题的由来:Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦。原因主要有两方面,Java和JSP文件本身编译时产生的乱码问题和Java程序于其他媒介交互产生的乱码问题。…

  • Unity3D 2018安装教程[通俗易懂]

    Unity3D 2018安装教程[通俗易懂]安装步骤:安装前先关闭杀毒软件和360卫士,注意安装路径不能有中文,安装包路径也不要有中文。试装系统:win1064bit安装版本:Unity2018.3.0重要:Unity2018.3.0相较2017版本的在启动时稳定了很多(2017版本启动经常会卡在loading界面)如果启动Unity2018.3.0时一直卡在loading界面进不去,可以尝试以下两种解决办法:1.1:将计算…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号