243,mybatis 多表关联查询
2016-01-31 19:48
411 查看
1,数据库表结构如下:
user用户表:
role角色表:
2,导入jar,Project->Properties
3,编写数据库连接配置文件和mybatis配置文件
db.properties:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/Test?useUnicode=true&characterEncoding=utf8
username=root
password=12345678
Configuration.xml:
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPE configurationPUBLIC
"-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<propertiesresource="db.properties"/>
<!-- 实体类重命名 -->
<typeAliases>
<typeAliasalias="User"type="com.ljs.entity.User"/>
<typeAliasalias="Role"type="com.ljs.entity.Role"/>
</typeAliases>
<!-- 连接配置 -->
<environmentsdefault="development">
<environmentid="development">
<transactionManagertype="JDBC"/>
<dataSourcetype="POOLED">
<propertyname="driver"value="${driver}"/>
<propertyname="url"value="${url}"/>
<propertyname="username"value="${username}"/>
<propertyname="password"value="${password}"/>
</dataSource>
</environment>
</environments>
<!-- 实体类映射 -->
<mappers>
<mapperresource="com/ljs/entity/User.xml"/>
</mappers>
</configuration>
4,编写User和Role实体类,配置文件User.xml
User.java:
package com.ljs.entity;
import java.io.Serializable;
import java.util.List;
public class Userimplements Serializable{
/**
*
*/
privatestatic
finallong
serialVersionUID = 1L;
privateint
id;
private Stringusername;
private Stringpassword;
private List<Role>roles;
public
int getId() {
returnid;
}
public
void setId(int
id) {
this.id =id;
}
public String getUsername() {
returnusername;
}
public
void setUsername(String username) {
this.username =username;
}
public String getPassword() {
returnpassword;
}
public
void setPassword(String password) {
this.password =password;
}
public
static long getSerialversionuid() {
returnserialVersionUID;
}
public List<Role> getRoles() {
returnroles;
}
public
void setRoles(List<Role> roles) {
this.roles =roles;
}
}
Role.java:
package com.ljs.entity;
import java.io.Serializable;
public class Roleimplements Serializable{
/**
*
*/
privatestatic
finallong
serialVersionUID = 1L;
privateint
id;
private Stringrole;
private Stringduty;
privateint
userid;
public
int getId() {
returnid;
}
public
void setId(int
id) {
this.id =id;
}
public String getRole() {
returnrole;
}
public
void setRole(String role) {
this.role =role;
}
public String getDuty() {
returnduty;
}
public
void setDuty(String duty) {
this.duty =duty;
}
public
int getUserid() {
returnuserid;
}
public
void setUserid(int
userid) {
this.userid =userid;
}
public
static long getSerialversionuid() {
returnserialVersionUID;
}
}
User.xml:
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEmapper
PUBLIC
"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mappernamespace="com.ljs.inter.IUserOperation">
<resultMapid="baseUserMap"type="User">
<idcolumn="u_id"property="id"/>
<resultcolumn="username"property="username"jdbcType="VARCHAR"/>
<resultcolumn="password"property="password"jdbcType="VARCHAR"/>
</resultMap>
<resultMapid="baseRoleMap"type="Role">
<idcolumn="r_id"property="id"/>
<resultcolumn="role"property="role"jdbcType="VARCHAR"/>
<resultcolumn="duty"property="duty"jdbcType="VARCHAR"/>
</resultMap>
<resultMapid="queryForListMap"type="User">
<idcolumn="u_id"property="id"/>
<resultcolumn="username"property="username"jdbcType="VARCHAR"/>
<resultcolumn="password"property="password"jdbcType="VARCHAR"/>
<collectionproperty="roles" column="userid"javaType="java.util.List"ofType="Role"resultMap="baseRoleMap"/>
</resultMap>
<selectid="queryForList"resultMap="queryForListMap">
<!-- 如果在一个查询中,有同名的字段,就要用别名区分,要不,会导致数据错乱 -->
select u.id as u_id,u.username,u.password,r.id as r_id,r.role,r.duty from user u inner join role r on u.id = r.userid where u.id = #{id}
</select>
</mapper>
5,编写接口和测试类
IUserOperation.java:
package com.ljs.inter;
import java.util.List;
import com.ljs.entity.User;
public interface IUserOperation {
public List<User> queryForList(intid);
}
Test.java:
package com.ljs.Test;
import java.io.Reader;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.ljs.entity.Role;
import com.ljs.entity.User;
import com.ljs.inter.IUserOperation;
public class Test {
private
static SqlSessionFactory sqlSessionFactory;
privatestatic Reader
reader;
/*
* 创建会话工厂
*/
static {
try {
reader = Resources.getResourceAsReader("Configuration.xml");
sqlSessionFactory =new SqlSessionFactoryBuilder().build(reader);
} catch (Exceptione) {
e.printStackTrace();
}
}
public
static void main(String[]
args) {
SqlSession session =sqlSessionFactory.openSession();
try {
IUserOperation operation =session.getMapper(IUserOperation.class);
List<User> users =operation.queryForList(1);
System.out.println("数据展现:");
for (Useruser :
users) {
System.out.println("用户信息:");
System.out.print("id = " +user.getId() +
" ");
System.out.print("username = " +user.getUsername() +
" ");
System.out.print("password = " +user.getPassword() +
"\n");
for(Role
role :user.getRoles()) {
System.out.print("roleid = " +role.getId() +
" ");
System.out.print("role = " +role.getRole() +
" ");
System.out.print("duty = " +role.getDuty() +
"\n");
}
}
} catch (Exceptione) {
//
TODO: handle exception
e.printStackTrace();
}finally {
}
}
}
测试结果如下:
————————————————————————————————————————
关系配置文件参考:
一对一:
user用户表:
role角色表:
2,导入jar,Project->Properties
3,编写数据库连接配置文件和mybatis配置文件
db.properties:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/Test?useUnicode=true&characterEncoding=utf8
username=root
password=12345678
Configuration.xml:
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPE configurationPUBLIC
"-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<propertiesresource="db.properties"/>
<!-- 实体类重命名 -->
<typeAliases>
<typeAliasalias="User"type="com.ljs.entity.User"/>
<typeAliasalias="Role"type="com.ljs.entity.Role"/>
</typeAliases>
<!-- 连接配置 -->
<environmentsdefault="development">
<environmentid="development">
<transactionManagertype="JDBC"/>
<dataSourcetype="POOLED">
<propertyname="driver"value="${driver}"/>
<propertyname="url"value="${url}"/>
<propertyname="username"value="${username}"/>
<propertyname="password"value="${password}"/>
</dataSource>
</environment>
</environments>
<!-- 实体类映射 -->
<mappers>
<mapperresource="com/ljs/entity/User.xml"/>
</mappers>
</configuration>
4,编写User和Role实体类,配置文件User.xml
User.java:
package com.ljs.entity;
import java.io.Serializable;
import java.util.List;
public class Userimplements Serializable{
/**
*
*/
privatestatic
finallong
serialVersionUID = 1L;
privateint
id;
private Stringusername;
private Stringpassword;
private List<Role>roles;
public
int getId() {
returnid;
}
public
void setId(int
id) {
this.id =id;
}
public String getUsername() {
returnusername;
}
public
void setUsername(String username) {
this.username =username;
}
public String getPassword() {
returnpassword;
}
public
void setPassword(String password) {
this.password =password;
}
public
static long getSerialversionuid() {
returnserialVersionUID;
}
public List<Role> getRoles() {
returnroles;
}
public
void setRoles(List<Role> roles) {
this.roles =roles;
}
}
Role.java:
package com.ljs.entity;
import java.io.Serializable;
public class Roleimplements Serializable{
/**
*
*/
privatestatic
finallong
serialVersionUID = 1L;
privateint
id;
private Stringrole;
private Stringduty;
privateint
userid;
public
int getId() {
returnid;
}
public
void setId(int
id) {
this.id =id;
}
public String getRole() {
returnrole;
}
public
void setRole(String role) {
this.role =role;
}
public String getDuty() {
returnduty;
}
public
void setDuty(String duty) {
this.duty =duty;
}
public
int getUserid() {
returnuserid;
}
public
void setUserid(int
userid) {
this.userid =userid;
}
public
static long getSerialversionuid() {
returnserialVersionUID;
}
}
User.xml:
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEmapper
PUBLIC
"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mappernamespace="com.ljs.inter.IUserOperation">
<resultMapid="baseUserMap"type="User">
<idcolumn="u_id"property="id"/>
<resultcolumn="username"property="username"jdbcType="VARCHAR"/>
<resultcolumn="password"property="password"jdbcType="VARCHAR"/>
</resultMap>
<resultMapid="baseRoleMap"type="Role">
<idcolumn="r_id"property="id"/>
<resultcolumn="role"property="role"jdbcType="VARCHAR"/>
<resultcolumn="duty"property="duty"jdbcType="VARCHAR"/>
</resultMap>
<resultMapid="queryForListMap"type="User">
<idcolumn="u_id"property="id"/>
<resultcolumn="username"property="username"jdbcType="VARCHAR"/>
<resultcolumn="password"property="password"jdbcType="VARCHAR"/>
<collectionproperty="roles" column="userid"javaType="java.util.List"ofType="Role"resultMap="baseRoleMap"/>
</resultMap>
<selectid="queryForList"resultMap="queryForListMap">
<!-- 如果在一个查询中,有同名的字段,就要用别名区分,要不,会导致数据错乱 -->
select u.id as u_id,u.username,u.password,r.id as r_id,r.role,r.duty from user u inner join role r on u.id = r.userid where u.id = #{id}
</select>
</mapper>
5,编写接口和测试类
IUserOperation.java:
package com.ljs.inter;
import java.util.List;
import com.ljs.entity.User;
public interface IUserOperation {
public List<User> queryForList(intid);
}
Test.java:
package com.ljs.Test;
import java.io.Reader;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.ljs.entity.Role;
import com.ljs.entity.User;
import com.ljs.inter.IUserOperation;
public class Test {
private
static SqlSessionFactory sqlSessionFactory;
privatestatic Reader
reader;
/*
* 创建会话工厂
*/
static {
try {
reader = Resources.getResourceAsReader("Configuration.xml");
sqlSessionFactory =new SqlSessionFactoryBuilder().build(reader);
} catch (Exceptione) {
e.printStackTrace();
}
}
public
static void main(String[]
args) {
SqlSession session =sqlSessionFactory.openSession();
try {
IUserOperation operation =session.getMapper(IUserOperation.class);
List<User> users =operation.queryForList(1);
System.out.println("数据展现:");
for (Useruser :
users) {
System.out.println("用户信息:");
System.out.print("id = " +user.getId() +
" ");
System.out.print("username = " +user.getUsername() +
" ");
System.out.print("password = " +user.getPassword() +
"\n");
for(Role
role :user.getRoles()) {
System.out.print("roleid = " +role.getId() +
" ");
System.out.print("role = " +role.getRole() +
" ");
System.out.print("duty = " +role.getDuty() +
"\n");
}
}
} catch (Exceptione) {
//
TODO: handle exception
e.printStackTrace();
}finally {
}
}
}
测试结果如下:
————————————————————————————————————————
关系配置文件参考:
一对一:
相关文章推荐
- SSH框架搭建总结
- 哈希算法
- Lua重新加载Lua文件
- 3268 多项式相加
- PyQt5 笔记(02):嵌套布局
- Lua封装格式化float
- PAT 1081. Rational Sum (20)
- Java基础——hashcode()与equals()
- Lua封装格式化html
- 生活在REPL中,工具与程序一体
- Office 2016九大新功能
- javascript中面向对象思想的体现(一)
- choose the time to run your jobs--sleep
- 基于java社会化海量数据采集爬虫框架搭建
- 【MVC】——MVC框架
- python零零碎碎
- Android ScrollView滚动条
- 学习老外用webstorm开发nodejs的技巧--代码提示DefinitelyTyped
- 【设计模式】装饰器模式
- 因果故事:窦燕山五子登科