1.mybatis02:

mybatis-config.xml:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 加載屬性文件 --> <properties resource="db.properties"/> <environments default="development"> <environment id="development"> <!-- 使用jdbc中的事務 --> <transactionManager type="JDBC"></transactionManager> <!-- 配置數據源 --> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!-- 引入映射文件 --> <mappers> <!-- <mapper resource="cn/zzsxt/mapper/TbUserMapper.xml"/> --> <!-- 注意:此種方法要求mapper接口和mapper映射文件要名稱相同,且放到同一個目錄下; --> <!-- <mapper class="cn.zzsxt.mapper.TbUserMapper"/> --> <!-- 注意:此種方法要求mapper接口和mapper映射文件要名稱相同,且放到同一個目錄下; --> <package name="cn.zzsxt.mapper"/> </mappers> </configuration>
log4j.properties:
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.org.apache.ibatis=DEBUG
#log4j.rootLogger=warn,appender1
#log4j.appender.appender1=org.apache.log4j.ConsoleAppender
#log4j.appender.appender1.layout=org.apache.log4j.SimpleLayout
db.properties:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=root
TbUser.java:
package cn.zzsxt.entity; import java.io.Serializable; import java.util.Date; public class TbUser implements Serializable{ private long id; private String username; private String sex; private Date birthday; private String address; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "TbUser [id=" + id + ", username=" + username + ", sex=" + sex + ", birthday=" + birthday + ", address=" + address + "]"; } }
TbUserMapper.xml:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- 1、 mapper接口的全限定名要和mapper映射文件的namespace值一致。 2、 mapper接口的方法名稱要和mapper映射文件的statement的id一致。 3、 mapper接口的方法參數類型要和mapper映射文件的statement的parameterType的值一致,而且它的參數是一個。 4、 mapper接口的方法返回值類型要和mapper映射文件的statement的resultType的值一致。 --> <mapper namespace="cn.zzsxt.mapper.TbUserMapper"> <!-- 1.需求根據用戶名稱模糊查詢 2.思路:模糊查詢返回結果可能是多條紀錄 3.resultType:指定就是單條記錄所映射成java對象類型 4.${}:表示拼接sql串,將接收到參數的內容不加任何修飾拼接在sql中 5.使用${}容易引起sql注入 6.${value}:接受輸入參數的內容,如果傳入類型是簡單類型,${}中只能用value --> <select id="findUserByName" parameterType="java.lang.String" resultType="cn.zzsxt.entity.TbUser"> select * from tb_user where username like '%${value}%' </select> <select id="findUserById" parameterType="java.lang.Long" resultType="cn.zzsxt.entity.TbUser"> select * from tb_user where id=#{id} </select> <insert id="addUser" parameterType="cn.zzsxt.entity.TbUser"> insert into tb_user(username,sex,birthday,address) values(#{username},#{sex},#{birthday},#{address}) </insert> </mapper>
TbUserMapper.java:
package cn.zzsxt.mapper; import java.util.List; import java.util.Map; import cn.zzsxt.entity.TbUser; import cn.zzsxt.vo.TbUserQuery; public interface TbUserMapper { List<TbUser> findUserByName(String username); TbUser findUserById(long id); int addUser(TbUser user); /** * 查詢用戶信息,要求對用戶名進行模糊查找,對性別進行精確查找 * @return */ List<TbUser> findUserByNameAndSexVo(TbUserQuery userQuery); /** * 查詢用戶信息,要求對用戶名進行模糊查找,對性別進行精確查找 * @param map * @return */ List<TbUser> findUserByNameAndSexMap(Map<String,Object> map); /** * 查詢用戶信息,要求對用戶名進行模糊查找,對性別進行精確查找 * @param user * @return */ List<TbUser> findUserByAddressAndSex(TbUser user); /** * 查詢用戶表中總記錄數 * @return */ int getCount(); /** * 使用resultMap封裝結果,根據用戶編號查詢用戶信息, * @param id * @return */ TbUser findUserByResultMap(long id); /** * 查詢部分列 * @param id * @return */ TbUser findUserByResultType(long id); List<TbUser> findUserList(TbUserQuery userQuery); }
TbUserMapper.xml:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- 1、 mapper接口的全限定名要和mapper映射文件的namespace值一致。 2、 mapper接口的方法名稱要和mapper映射文件的statement的id一致。 3、 mapper接口的方法參數類型要和mapper映射文件的statement的parameterType的值一致,而且它的參數是一個。 4、 mapper接口的方法返回值類型要和mapper映射文件的statement的resultType的值一致。 --> <mapper namespace="cn.zzsxt.mapper.TbUserMapper"> <!-- 1.需求根據用戶名稱模糊查詢 2.思路:模糊查詢返回結果可能是多條紀錄 3.resultType:指定就是單條記錄所映射成java對象類型 4.${}:表示拼接sql串,將接收到參數的內容不加任何修飾拼接在sql中 5.使用${}容易引起sql注入 6.${value}:接受輸入參數的內容,如果傳入類型是簡單類型,${}中只能用value --> <select id="findUserByName" parameterType="java.lang.String" resultType="cn.zzsxt.entity.TbUser"> select * from tb_user where username like '%${value}%' </select> <select id="findUserById" parameterType="java.lang.Long" resultType="cn.zzsxt.entity.TbUser"> select * from tb_user where id=#{id} </select> <insert id="addUser" parameterType="cn.zzsxt.entity.TbUser"> insert into tb_user(username,sex,birthday,address) values(#{username},#{sex},#{birthday},#{address}) </insert> <!-- 根據用戶名和性別查詢 --> <select id="findUserByNameAndSexVo" parameterType="cn.zzsxt.vo.TbUserQuery" resultType="cn.zzsxt.entity.TbUser"> select * from tb_user where username like '%${user.username}%' and sex=#{user.sex} </select> <!-- 根據用戶名和性別查詢,參數為map --> <select id="findUserByNameAndSexMap" parameterType="java.util.HashMap" resultType="cn.zzsxt.entity.TbUser"> select * from tb_user where username like '%${uname}%' and sex=#{sex} </select> <!-- 根據用戶名和性別查詢 --> <select id="findUserByAddressAndSex" parameterType="cn.zzsxt.entity.TbUser" resultType="cn.zzsxt.entity.TbUser"> select * from tb_user where address like '%${address}%' and sex=#{sex} </select> <!-- 查詢總記錄數 --> <select id="getCount" resultType="java.lang.Integer"> select count(*) from tb_user </select> <!-- 定義resultMap:解決字段名稱與屬性名稱不一致的問題。 將SELECT id id_,username username_, sex sex_ FROM tb_user WHERE id = 1 和 User類中的屬性作一個映射關系 type:resultMap最終映射的java對象類型,可以使用別名 id:對resultMap的唯一標識 --> <resultMap id="userResultMap" type="cn.zzsxt.entity.TbUser"> <id column="id_" property="id"/> <result column="username_" property="username"/> <result column="sex_" property="sex"/> <result column="birthday" property="birthday"/> <result column="address" property="address"/> </resultMap> <select id="findUserByResultMap" parameterType="java.lang.Long" resultMap="userResultMap"> select id id_,username username_,sex sex_,birthday,address from tb_user where id=#{id} </select> <!-- 查詢部分列 --> <select id="findUserByResultType" parameterType="java.lang.Long" resultType="cn.zzsxt.entity.TbUser"> select id,username,sex from tb_user where id=#{id} </select> <!-- 動態SQL --> <select id="findUserList" parameterType="cn.zzsxt.vo.TbUserQuery" resultType="cn.zzsxt.entity.TbUser"> select * from tb_user <where> <!-- <if test="user.address!=null and user.address!=''"> --> <!-- and address like'%${user.address}%' --> <!-- </if> --> <!-- <if test="user.sex!=null and user.sex!=''"> --> <!-- and sex=#{user.sex} --> <!-- </if> --> <!-- 引入SQL片段 --> <include refid="where_address_sex"></include> </where> </select> <!-- SQL片段:提高sql語句的復用性 --> <sql id="where_address_sex"> <if test="user.address!=null and user.address!=''"> and address like'%${user.address}%' </if> <if test="user.sex!=null and user.sex!=''"> and sex=#{user.sex} </if> <if test="ids!=null"> <!-- 使用foreach遍歷傳入ids collection:指定輸入對象中集合屬性 item:每次遍歷生成對象 open:開始遍歷時拼接的串 close:結束遍歷時拼接的串 separator分隔符:遍歷的兩個對象中需要拼接的串 --> <foreach collection="ids" item="user_id" open="and id in (" close=")" separator=","> #{user_id} </foreach> </if> </sql> </mapper>
TbUserQuery.java:
package cn.zzsxt.vo; import java.util.List; import cn.zzsxt.entity.TbUser; public class TbUserQuery { private TbUser user; //用戶編號 private List<Long> ids; public TbUser getUser() { return user; } public void setUser(TbUser user) { this.user = user; } public List<Long> getIds() { return ids; } public void setIds(List<Long> ids) { this.ids = ids; } }
TestTbUserMapper.java:
package cn.zzsxt.test; import java.io.InputStream; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test; import cn.zzsxt.entity.TbUser; import cn.zzsxt.mapper.TbUserMapper; import cn.zzsxt.vo.TbUserQuery; public class TestTbUserMapper { @Test public void testFindUserByName(){ InputStream ips = this.getClass().getResourceAsStream("/mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(ips); SqlSession sqlSession=sqlSessionFactory.openSession(); //獲取TbUserMapper生成的代理(通過jdk的動態代理實現的) TbUserMapper tbUserMapper = sqlSession.getMapper(TbUserMapper.class); List<TbUser> list = tbUserMapper.findUserByName("張"); for (TbUser tbUser : list) { System.out.println(tbUser); } sqlSession.close(); } @Test public void testFindUserById(){ InputStream ips = this.getClass().getResourceAsStream("/mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(ips); SqlSession sqlSession=sqlSessionFactory.openSession(); //獲取TbUserMapper生成的代理(通過jdk的動態代理實現的) TbUserMapper tbUserMapper = sqlSession.getMapper(TbUserMapper.class); TbUser user = tbUserMapper.findUserById(1); System.out.println(user); sqlSession.close(); } @Test public void testAddUser(){ InputStream ips = this.getClass().getResourceAsStream("/mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(ips); SqlSession sqlSession=sqlSessionFactory.openSession(); //獲取TbUserMapper生成的代理(通過jdk的動態代理實現的) TbUserMapper tbUserMapper = sqlSession.getMapper(TbUserMapper.class); TbUser user = new TbUser(); user.setUsername("王五"); user.setSex("女"); user.setBirthday(new Date()); user.setAddress("鄭州"); int count = tbUserMapper.addUser(user); sqlSession.commit(); System.out.println(count); sqlSession.close(); } @Test public void testFindUserByNameAndSexVo(){ InputStream ips = this.getClass().getResourceAsStream("/mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(ips); SqlSession sqlSession=sqlSessionFactory.openSession(); //獲取TbUserMapper生成的代理(通過jdk的動態代理實現的) TbUserMapper tbUserMapper = sqlSession.getMapper(TbUserMapper.class); TbUserQuery userQuery = new TbUserQuery(); TbUser user = new TbUser(); user.setUsername("五"); user.setSex("男"); userQuery.setUser(user); List<TbUser> list= tbUserMapper.findUserByNameAndSexVo(userQuery); for (TbUser tbUser : list) { System.out.println(tbUser); } sqlSession.close(); } @Test public void testFindUserByNameAndSexMap(){ InputStream ips = this.getClass().getResourceAsStream("/mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(ips); SqlSession sqlSession=sqlSessionFactory.openSession(); //獲取TbUserMapper生成的代理(通過jdk的動態代理實現的) TbUserMapper tbUserMapper = sqlSession.getMapper(TbUserMapper.class); Map<String,Object> map = new HashMap<String,Object>(); map.put("uname", "五"); map.put("sex", "男"); List<TbUser> list= tbUserMapper.findUserByNameAndSexMap(map); for (TbUser tbUser : list) { System.out.println(tbUser); } sqlSession.close(); } @Test public void testFindUserByAddressAndSex(){ InputStream ips = this.getClass().getResourceAsStream("/mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(ips); SqlSession sqlSession=sqlSessionFactory.openSession(); //獲取TbUserMapper生成的代理(通過jdk的動態代理實現的) TbUserMapper tbUserMapper = sqlSession.getMapper(TbUserMapper.class); TbUser user = new TbUser(); user.setAddress("安陽"); user.setSex("男"); List<TbUser> list= tbUserMapper.findUserByAddressAndSex(user); for (TbUser tbUser : list) { System.out.println(tbUser); } sqlSession.close(); } }
TestTbUserMapper2.java:
package cn.zzsxt.test; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test; import cn.zzsxt.entity.TbUser; import cn.zzsxt.mapper.TbUserMapper; import cn.zzsxt.vo.TbUserQuery; public class TestTbUserMapper2 { @Test public void testGetCount(){ InputStream ips = this.getClass().getResourceAsStream("/mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(ips); SqlSession sqlSession=sqlSessionFactory.openSession(); //獲取TbUserMapper生成的代理(通過jdk的動態代理實現的) TbUserMapper tbUserMapper = sqlSession.getMapper(TbUserMapper.class); int count = tbUserMapper.getCount(); System.out.println("總記錄數為:"+count); sqlSession.close(); } @Test public void testFindUserByResultMap(){ InputStream ips = this.getClass().getResourceAsStream("/mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(ips); SqlSession sqlSession=sqlSessionFactory.openSession(); //獲取TbUserMapper生成的代理(通過jdk的動態代理實現的) TbUserMapper tbUserMapper = sqlSession.getMapper(TbUserMapper.class); TbUser user = tbUserMapper.findUserByResultMap(1L); System.out.println(user); sqlSession.close(); } @Test public void testFindUserByResultType(){ InputStream ips = this.getClass().getResourceAsStream("/mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(ips); SqlSession sqlSession=sqlSessionFactory.openSession(); //獲取TbUserMapper生成的代理(通過jdk的動態代理實現的) TbUserMapper tbUserMapper = sqlSession.getMapper(TbUserMapper.class); TbUser user = tbUserMapper.findUserByResultType(1L); System.out.println(user); sqlSession.close(); } /** * 動態SQL */ @Test public void testFindUserList(){ InputStream ips = this.getClass().getResourceAsStream("/mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(ips); SqlSession sqlSession=sqlSessionFactory.openSession(); //獲取TbUserMapper生成的代理(通過jdk的動態代理實現的) TbUserMapper tbUserMapper = sqlSession.getMapper(TbUserMapper.class); TbUserQuery userQuery = new TbUserQuery(); TbUser user = new TbUser(); //user.setAddress("安陽"); //user.setSex("男"); userQuery.setUser(user); //此處若不傳值,報錯!!!!!! //foreach測試 List<Long> ids = new ArrayList<Long>(); ids.add(1L); ids.add(2L); ids.add(3L); userQuery.setIds(ids); List<TbUser> list = tbUserMapper.findUserList(userQuery); for (TbUser tbUser : list) { System.out.println(tbUser); } sqlSession.close(); } }
2.mybatis03:

mybatis-config.xml:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 加載屬性文件 --> <properties resource="db.properties"/> <environments default="development"> <environment id="development"> <!-- 使用jdbc中的事務 --> <transactionManager type="JDBC"></transactionManager> <!-- 配置數據源 --> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!-- 引入映射文件 --> <mappers> <!-- <mapper resource="cn/zzsxt/mapper/TbUserMapper.xml"/> --> <!-- 注意:此種方法要求mapper接口和mapper映射文件要名稱相同,且放到同一個目錄下; --> <!-- <mapper class="cn.zzsxt.mapper.TbUserMapper"/> --> <!-- 注意:此種方法要求mapper接口和mapper映射文件要名稱相同,且放到同一個目錄下; --> <package name="cn.zzsxt.mapper"/> </mappers> </configuration>
db.properties:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
username=root
password=root
log4j.properties:
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.org.apache.ibatis=DEBUG
#log4j.rootLogger=warn,appender1
#log4j.appender.appender1=org.apache.log4j.ConsoleAppender
#log4j.appender.appender1.layout=org.apache.log4j.SimpleLayout
TbGoods.java:
package cn.zzsxt.entity; import java.util.Date; public class TbGoods { private long id; private String name; private double price; private Date create_time; private String detail; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public Date getCreate_time() { return create_time; } public void setCreate_time(Date create_time) { this.create_time = create_time; } public String getDetail() { return detail; } public void setDetail(String detail) { this.detail = detail; } @Override public String toString() { return "TbGoods [id=" + id + ", name=" + name + ", price=" + price + ", create_time=" + create_time + ", detail=" + detail + "]"; } }
TbOrder.java:
package cn.zzsxt.entity; import java.util.Date; import java.util.List; public class TbOrder { private long id; private long user_id; private String order_number; private Date create_time; private String detail; //訂單與訂單明細:一對多 private List<TbOrderDetail> orderDetailList; public long getId() { return id; } public void setId(long id) { this.id = id; } public long getUser_id() { return user_id; } public void setUser_id(long user_id) { this.user_id = user_id; } public String getOrder_number() { return order_number; } public void setOrder_number(String order_number) { this.order_number = order_number; } public Date getCreate_time() { return create_time; } public void setCreate_time(Date create_time) { this.create_time = create_time; } public String getDetail() { return detail; } public void setDetail(String detail) { this.detail = detail; } public List<TbOrderDetail> getOrderDetailList() { return orderDetailList; } public void setOrderDetailList(List<TbOrderDetail> orderDetailList) { this.orderDetailList = orderDetailList; } @Override public String toString() { return "TbOrder [id=" + id + ", user_id=" + user_id + ", order_number=" + order_number + ", create_time=" + create_time + ", detail=" + detail + "]"; } }
TbOrderDetail.java:
package cn.zzsxt.entity; public class TbOrderDetail { private long id; private long order_id; private long goods_id; private long goods_num; //訂單明細與商品:一對一 private TbGoods goods; public long getId() { return id; } public void setId(long id) { this.id = id; } public long getOrder_id() { return order_id; } public void setOrder_id(long order_id) { this.order_id = order_id; } public long getGoods_id() { return goods_id; } public void setGoods_id(long goods_id) { this.goods_id = goods_id; } public long getGoods_num() { return goods_num; } public void setGoods_num(long goods_num) { this.goods_num = goods_num; } public TbGoods getGoods() { return goods; } public void setGoods(TbGoods goods) { this.goods = goods; } @Override public String toString() { return "TbOrderDetail [id=" + id + ", order_id=" + order_id + ", goods_id=" + goods_id + ", goods_num=" + goods_num + "]"; } }
TbUser.java:
package cn.zzsxt.entity; import java.io.Serializable; import java.util.Date; import java.util.List; public class TbUser implements Serializable{ private long id; private String username; private String sex; private Date birthday; private String address; //用戶與訂單:一對多 private List<TbOrder> orderList; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public List<TbOrder> getOrderList() { return orderList; } public void setOrderList(List<TbOrder> orderList) { this.orderList = orderList; } @Override public String toString() { return "TbUser [id=" + id + ", username=" + username + ", sex=" + sex + ", birthday=" + birthday + ", address=" + address + "]"; } }
TbOrderQuery01.java:
package cn.zzsxt.vo; import cn.zzsxt.entity.TbOrder; public class TbOrderQuery01 extends TbOrder { private String username; private String sex; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { return "TbOrderQuery01 [username=" + username + ", sex=" + sex + "]"+super.toString(); } }
TbOrderQuery02.java:
package cn.zzsxt.vo; import cn.zzsxt.entity.TbOrder; import cn.zzsxt.entity.TbUser; public class TbOrderQuery02 extends TbOrder { private TbUser user; public TbUser getUser() { return user; } public void setUser(TbUser user) { this.user = user; } @Override public String toString() { return "TbOrderQuery02:"+super.toString()+" [user=" + user + "]"; } }
TbOrderQuery03.java:
package cn.zzsxt.vo; import java.util.List; import cn.zzsxt.entity.TbOrder; import cn.zzsxt.entity.TbOrderDetail; import cn.zzsxt.entity.TbUser; public class TbOrderQuery03 extends TbOrder { //訂單與用戶:一對一 private TbUser user; //訂單與訂單明細:一對多 private List<TbOrderDetail> orderDetailList; public TbUser getUser() { return user; } public void setUser(TbUser user) { this.user = user; } public List<TbOrderDetail> getOrderDetailList() { return orderDetailList; } public void setOrderDetailList(List<TbOrderDetail> orderDetailList) { this.orderDetailList = orderDetailList; } @Override public String toString() { return "TbOrderQuery03 [user=" + user + ", orderDetailList=" + orderDetailList + ", toString()=" + super.toString() + "]"; } }
TbOrderMapper.java:
package cn.zzsxt.mapper; import java.util.List; import cn.zzsxt.entity.TbUser; import cn.zzsxt.vo.TbOrderQuery01; import cn.zzsxt.vo.TbOrderQuery02; import cn.zzsxt.vo.TbOrderQuery03; public interface TbOrderMapper { /** * 查詢訂單信息,關聯用戶信息 * @return */ List<TbOrderQuery01> findOrderAndUser(); /** * 查詢訂單信息,關聯用戶信息,將查詢結果封裝成自定義的resultMap中 * @return */ List<TbOrderQuery02> findOrderAndUserResultMap(); /** * 查詢訂單信息,關聯用戶信息和訂單明細 * @return */ List<TbOrderQuery03> findOrderAndDetailAndUser(); /** * 查詢用戶信息,關聯訂單信息,訂單明細和商品信息 * @return */ List<TbUser> findUserAndGoods(); }
TbOrderMapper.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="cn.zzsxt.mapper.TbOrderMapper"> <!-- 查詢訂單信息關聯用戶信息 一對一 --> <select id="findOrderAndUser" resultType="cn.zzsxt.vo.TbOrderQuery01"> SELECT tb_order.id, tb_order.user_id, tb_order.order_number, tb_user.username, tb_user.sex FROM tb_order, tb_user WHERE tb_order.user_id = tb_user.id </select> <!-- 自定義resultMap --> <resultMap type="cn.zzsxt.vo.TbOrderQuery02" id="orderAndUserResultMap"> <id column="order_id" property="id"/> <result column="user_id" property="user_id"/> <result column="order_number" property="order_number"/> <result column="detail" property="detail"/> <!-- 一對一關聯 --> <association property="user" javaType="cn.zzsxt.entity.TbUser"> <id column="id" property="id"/> <result column="username" property="username"/> <result column="sex" property="sex"/> <result column="birthday" property="birthday"/> <result column="address" property="address"/> </association> </resultMap> <select id="findOrderAndUserResultMap" resultMap="orderAndUserResultMap"> SELECT tb_order.id order_id, tb_order.user_id, tb_order.order_number, tb_order.detail, tb_user.username, tb_user.sex, tb_user.birthday, tb_user.address FROM tb_order, tb_user WHERE tb_order.user_id = tb_user.id </select> <!-- 自定義resultMap --> <resultMap type="cn.zzsxt.vo.TbOrderQuery03" id="orderAndDetailAndUserResultMap"> <id column="order_id" property="id"/> <result column="user_id" property="user_id"/> <result column="order_number" property="order_number"/> <result column="create_time" property="create_time"/> <result column="detail" property="detail"/> <!-- 一對一關聯 --> <association property="user" javaType="cn.zzsxt.entity.TbUser"> <id column="id" property="id"/> <result column="username" property="username"/> <result column="sex" property="sex"/> <result column="birthday" property="birthday"/> <result column="address" property="address"/> </association> <!-- 一對多關聯 --> <collection property="orderDetailList" ofType="cn.zzsxt.entity.TbOrderDetail"> <id column="detail_id" property="id"/> <result column="goods_id" property="goods_id"/> <result column="goods_num" property="goods_num"/> </collection> </resultMap> <select id="findOrderAndDetailAndUser" resultMap="orderAndDetailAndUserResultMap"> SELECT tb_order.id order_id, tb_order.user_id, tb_order.order_number, tb_order.create_time, tb_order.detail, tb_user.username, tb_user.sex, tb_user.birthday, tb_user.address, tb_order_detail.id detail_id, tb_order_detail.goods_id, tb_order_detail.goods_num FROM tb_order, tb_user, tb_order_detail WHERE tb_order.user_id = tb_user.id AND tb_order.id = tb_order_detail.order_id </select> <!-- 多對多 --> <resultMap type="cn.zzsxt.entity.TbUser" id="userAndGoodsResultMap"> <id column="user_id" property="id"/> <result column="username" property="username"/> <result column="sex" property="sex"/> <result column="birthday" property="birthday"/> <result column="address" property="address"/> <!-- 一對多 --> <collection property="orderList" ofType="cn.zzsxt.entity.TbOrder"> <id column="order_id" property="id"/> <result column="order_number" property="order_number"/> <result column="create_time" property="create_time"/> <result column="detail" property="detail"/> <!-- 一對多 --> <collection property="orderDetailList" ofType="cn.zzsxt.entity.TbOrderDetail"> <id column="detail_id" property="id"/> <result column="goods_id" property="goods_id"/> <result column="goods_num" property="goods_num"/> <!-- 一對一 --> <association property="goods" javaType="cn.zzsxt.entity.TbGoods"> <result column="name" property="name"/> <result column="price" property="price"/> <result column="goods_create_time" property="create_time"/> <result column="goods_detail" property="detail"/> </association> </collection> </collection> </resultMap> <select id="findUserAndGoods" resultMap="userAndGoodsResultMap"> SELECT tb_user.id user_id, tb_user.username, tb_user.sex, tb_user.birthday, tb_user.address, tb_order.id order_id, tb_order.order_number, tb_order.create_time, tb_order.detail, tb_order_detail.id detail_id, tb_order_detail.goods_id, tb_order_detail.goods_num, tb_goods.name, tb_goods.price, tb_goods.create_time goods_create_time, tb_goods.detail goods_detail FROM tb_order, tb_user, tb_order_detail, tb_goods WHERE tb_order.user_id = tb_user.id AND tb_order.id = tb_order_detail.order_id AND tb_order_detail.goods_id = tb_goods.id </select> </mapper>
TestOrderMapper.java:
package cn.zzsxt.test; import java.io.InputStream; import java.util.List; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test; import cn.zzsxt.entity.TbGoods; import cn.zzsxt.entity.TbOrder; import cn.zzsxt.entity.TbOrderDetail; import cn.zzsxt.entity.TbUser; import cn.zzsxt.mapper.TbOrderMapper; import cn.zzsxt.vo.TbOrderQuery01; import cn.zzsxt.vo.TbOrderQuery02; import cn.zzsxt.vo.TbOrderQuery03; public class TestOrderMapper { @Test public void testFindOrderAndUser(){ InputStream ips = this.getClass().getResourceAsStream("/mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(ips); SqlSession sqlSession = sqlSessionFactory.openSession(); TbOrderMapper orderMapper = sqlSession.getMapper(TbOrderMapper.class); List<TbOrderQuery01> list = orderMapper.findOrderAndUser(); for (TbOrderQuery01 tbOrderQuery01 : list) { System.out.println(tbOrderQuery01); } } @Test public void testFindOrderAndUserResultMap(){ InputStream ips = this.getClass().getResourceAsStream("/mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(ips); SqlSession sqlSession = sqlSessionFactory.openSession(); TbOrderMapper orderMapper = sqlSession.getMapper(TbOrderMapper.class); List<TbOrderQuery02> list = orderMapper.findOrderAndUserResultMap(); for (TbOrderQuery02 tbOrderQuery02 : list) { System.out.println(tbOrderQuery02); } } @Test public void testFindOrderAndDetailAndUser(){ InputStream ips = this.getClass().getResourceAsStream("/mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(ips); SqlSession sqlSession = sqlSessionFactory.openSession(); TbOrderMapper orderMapper = sqlSession.getMapper(TbOrderMapper.class); List<TbOrderQuery03> list = orderMapper.findOrderAndDetailAndUser(); for (TbOrderQuery03 tbOrderQuery03 : list) { System.out.println(tbOrderQuery03); } } @Test public void testFindUserAndGoods(){ InputStream ips = this.getClass().getResourceAsStream("/mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(ips); SqlSession sqlSession = sqlSessionFactory.openSession(); TbOrderMapper orderMapper = sqlSession.getMapper(TbOrderMapper.class); List<TbUser> list = orderMapper.findUserAndGoods(); for (TbUser tbUser : list) { System.out.println("用戶信息:"+tbUser); List<TbOrder> orderList = tbUser.getOrderList();//獲取訂單信息 System.out.println("訂單信息:"); for (TbOrder tbOrder : orderList) { System.out.println(tbOrder); System.out.println("訂單明細:"); List<TbOrderDetail> orderDetailList = tbOrder.getOrderDetailList();//獲取訂單明細 for (TbOrderDetail tbOrderDetail : orderDetailList) { System.out.println(tbOrderDetail); //獲取商品信息 TbGoods tbGoods = tbOrderDetail.getGoods(); System.out.println(tbGoods); } } } } }
