您的位置:首页 > 其它

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 {

}

}

}

测试结果如下:



————————————————————————————————————————
关系配置文件参考:
一对一:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: