MyBatis学习系列八:多表查询二
2015-07-26 16:31
489 查看
1.实体类
2.xml
3.mapper
4.dao
5.service
xml还有一种嵌套查询的写法,不过官方不建议,会产生N+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 在CS程序中的应用
- SpringMVC+MyBatis项目总结(一)
- SpringMVC+MyBatis项目总结(二)
- MyBatis返回结果不稳定
- MyBatis通过反射建立一个对象的过程。
- springMVC+spring+Mybatis
- SpringMVC+mybatis+Spring框架整合+简单实现的demo
- Spring+mybatis+shiro+freemarker+ehcache+ldap+mongo
- 继续钟爱JdbcTemplate
- 基于全注解的Spring3.1 mvc、myBatis3.1、Mysql的轻量级项目
- Mybatis的几点小结
- 懒到极致:对mybatis的进一步精简
- [续] 懒到极致:对mybatis的进一步精简
- MyBatis Geneator 详解
- 深入了解MyBatis参数
- XML Referenced file contains errors
- mybatis执行批量更新batch update 的方法(oracle,mysql)
- Spring+Mybatis+MySql+Maven 简单的事务管理案例