application.properties配置文件
############################################ ## MySQL数据库连接 ############################################ spring.datasource.url = jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=utf8&useSSL=false spring.datasource.username = root spring.datasource.password = 123456 spring.datasource.driverClassName = com.mysql.jdbc.Driver ############################################ ## 配置自动建表:updata:没有表新建,有表更新操作,控制台显示建表语句 ############################################ spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true ############################################ # 加载mybatis 配置的Mapper ############################################ mybatis.mapper-locations=classpath:mybatisMapper/*Mapper.xml
1、用户实体类(jpa自动创建表)
@Entity @Table(name = "user") public class User { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE) @Column(name = "id") private Integer id; @Column(name = "name") private String name; @Column(name = "subname") private String subname; @Column(name = "password") private String password; @Column(name = "telephone") private String telephone; @ManyToOne @JoinColumn(name = "address_id") private Address addresses; @OneToOne @JoinColumn(name = "idcard_id") private IdCard idcard; @ManyToMany @JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "u_id",referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "r_id", referencedColumnName = "id") ) private Set<Role> 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 String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getTelephone() { return telephone; } public void setTelephone(String telephone) { this.telephone = telephone; } public String getSubname() { return subname; } public void setSubname(String subname) { this.subname = subname; } public Address getAddresses() { return addresses; } public void setAddresses(Address addresses) { this.addresses = addresses; } public IdCard getIdcard() { return idcard; } public void setIdcard(IdCard idcard) { this.idcard = idcard; } public Set<Role> getRoles() { return roles; } public void setRoles(Set<Role> roles) { this.roles = roles; } }
2、身份证实体类(jpa自动创建表)
@Entity @Table(name = "idcard") public class IdCard { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE) @Column(name = "id" ) private Integer id; @Column(name = "num" ) private String num; @JsonIgnore @OneToOne(fetch = FetchType.LAZY, mappedBy = "idcard") private User user; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getNum() { return num; } public void setNum(String num) { this.num = num; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } }
3、地址实体类(jpa自动创建表)
@Entity @Table(name = "address") public class Address { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE) @Column(name = "id") private Integer id; @Column(name = "address") private String address; /* @JsonIgnore @OneToMany(mappedBy = "addresses") private User user;*/ public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } /*public User getUser() { return user; } public void setUser(User user) { this.user = user; }*/ }
4、角色实体类(jpa自动创建表)
@Entity @Table(name = "role") public class Role { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE) @Column(name = "id") private Integer id; @Column(name = "name") private String name; @JsonIgnore @ManyToMany(mappedBy = "roles") private Set<User> users; 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 Set<User> getUsers() { return users; } public void setUsers(Set<User> users) { this.users = users; } }
5、手动创建user_role中间表(用于多对多映射)
create table user_role( u_id int(11) NOT NULL, r_id int(11) NOT NULL, primary key(u_id,r_id), foreign key(u_id) references user(id), foreign key(r_id) references role(id) )ENGINE=MyISAM DEFAULT CHARSET=utf8
ENGIN可以根据自己建表的情况设定,一般为InnoDB
6、封装用于返回的结果(DataResponseVo)
public class DataResponseVo extends BaseResponseVo implements Serializable{ private static final long serialVersionUID = 8197244837986532584L; private Object content; public DataResponseVo() { } public DataResponseVo(Object content) { this.content = content; } public DataResponseVo(int code, Object content) { super(code); this.content = content; } public Object getContent() { return content; } public void setContent(Object content) { this.content = content; } }
7、写接口调用
@RequestMapping(value = "/findall", method = RequestMethod.GET, produces = {"application/json"}) public DataResponseVo findAllUser() { List<User> users = userDao.findAll(); return new DataResponseVo(0,users); }
8、返回结果为
{
"code": 0,
"content": [
{
"id": 1,
"name": "张三",
"subname": "XX",
"password": "123456",
"telephone": "1000000",
"addresses": {
"id": 1,
"address": "山东济南市"
},
"idcard": {
"id": 2,
"num": "3729092xxxxxxx"
},
"roles": [
{
"id": 1,
"name": "系统管理员"
},
{
"id": 3,
"name": "普通用户"
},
{
"id": 2,
"name": "管理员"
}
]
},
{
"id": 2,
"name": "李四",
"subname": "Q",
"password": "123456",
"telephone": "1786xxxxxx3",
"addresses": {
"id": 1,
"address": "山东济南市"
},
"idcard": {
"id": 1,
"num": "37299219XXXXXXXXX"
},
"roles": [
{
"id": 3,
"name": "普通用户"
}
]
}
]
}