您的位置:首页 > 其它

MyBatis学习系列八:多表查询二

2015-07-26 16:31 489 查看
1.实体类

public class User {
private Integer id;
private String name;
private Integer gender;
private Integer age;
private Address address;
......
}
public class Address {
private Integer id;
private String province;
private String city;
private String district;
}


2.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="com.xiang.mapper.UserMapper">
<!-- 嵌套结果 -->
<resultMap type="com.xiang.domain.User" id="UserResultMap">
<id property="id" column="userId" jdbcType="INTEGER" javaType="java.lang.Integer"/>
<result property="name" column="name" jdbcType="VARCHAR" javaType="java.lang.String"/>
<result property="gender" column="gender" jdbcType="INTEGER" javaType="java.lang.Integer"/>
<result property="age" column="age" jdbcType="INTEGER" javaType="java.lang.Integer"/>
<association property="address" javaType="com.xiang.domain.Address">
<id property="id" column="id" jdbcType="INTEGER" javaType="java.lang.Integer"/>
<result property="province" column="province" jdbcType="VARCHAR" javaType="java.lang.String"/>
<result property="city" column="city" jdbcType="VARCHAR" javaType="java.lang.String"/>
<result property="district" column="district" jdbcType="VARCHAR" javaType="java.lang.String"/>
<result property="detail" column="detail" jdbcType="VARCHAR" javaType="java.lang.String"/>
</association>
</resultMap>

<select id="findById" parameterType="int" resultMap="UserResultMap">
SELECT u.id userId,u.name,u.gender,u.age,a.id,a.province,a.city,a.district,a.detail
FROM user u LEFT JOIN address a on u.addressId = a.id where u.id = #{id}
</select>

<select id="findAll" parameterType="int" resultMap="UserResultMap">
SELECT u.id userId,u.name,u.gender,u.age,a.id,a.province,a.city,a.district,a.detail
FROM user u LEFT JOIN address a on u.addressId = a.id
</select>
</mapper>


3.mapper

public interface UserMapper {
public User findById(Integer id);
public List<User> findAll();
}


4.dao

public class UserDao {
public User findById(Integer id){
User user = new User();
SqlSession sqlSession = null;
sqlSession = GetSqlSessionFactory.getInstance().getSqlSessionFactory().openSession();
if (sqlSession != null) {
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
user = userMapper.findById(id);
sqlSession.close();
}
return user;
};
public List<User> findAll(){
List<User> users = new ArrayList<User>();
SqlSession sqlSession = null;
sqlSession = GetSqlSessionFactory.getInstance().getSqlSessionFactory().openSession();
if (sqlSession != null) {
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
users = userMapper.findAll();
sqlSession.close();
}
return users;
};
}


5.service

public class UserService {
public User findById(String id){
UserDao userDao = new UserDao();
User user = new User();
if (id != null && !"".equals(id.trim())) {
user = userDao.findById(Integer.valueOf(id));
}
return user;
};
public List<User> findAll(){
UserDao userDao = new UserDao();
List<User> users = new ArrayList<User>();
users = userDao.findAll();
return users;
};
}


xml还有一种嵌套查询的写法,不过官方不建议,会产生N+1问题

<resultMap type="com.xiang.domain.User" id="UserResultMap">
<id property="id" column="id" jdbcType="INTEGER" javaType="java.lang.Integer"/>
<result property="name" column="name" jdbcType="VARCHAR" javaType="java.lang.String"/>
<result property="gender" column="gender" jdbcType="INTEGER" javaType="java.lang.Integer"/>
<result property="age" column="age" jdbcType="INTEGER" javaType="java.lang.Integer"/>
<association property="address"  javaType="com.xiang.domain.Address" column="addressId" select="findAddress"></association>
</resultMap>

<select id="findAddress" parameterType="int" resultType="com.xiang.domain.Address">
SELECT id,province,city,district,detail FROM address WHERE id=#{id}
</select>

<select id="findById" parameterType="int" resultMap="UserResultMap">
SELECT id,name,gender,age,addressId FROM user where id=#{id}
</select>

<select id="findAll" parameterType="int" resultMap="UserResultMap">
SELECT id,name,gender,age,addressId FROM user
</select>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mybatis