Mybatis学习教程—— Mybatis入门实例

MyBatis

        MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。

     本教程是用maven构建项目、不会maven的开这个文章!-----Maven教程
  • 开发工具:idea
  • 语言:java
  • 项目结构:maven项目
  • 看注释学习!!!
  • mysql数据库


1.1、先来个简单的、入门程序!

目录结构(怕一些因为文件路径错误、所有不要原版不动拷贝、要理解!)

1.1、db.properties文件

[java]  view plain  copy
 print ?
  1. "font-size:18px;">jdbc.driver=com.mysql.jdbc.Driver  
  2. jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=UTF-8  
  3. jdbc.username=用户名  
  4. jdbc.password=密码  

1.1.1SQL语句、数据表

[java]  view plain  copy
 print ?
  1. /* 
  2. SQLyog v10.2  
  3. MySQL - 5.1.72-community : Database - mybatis 
  4. ********************************************************************* 
  5. */  
  6. /*Table structure for table `items` */  
  7.   
  8. CREATE TABLE `items` (  
  9.   `id` int(11) NOT NULL AUTO_INCREMENT,  
  10.   `name` varchar(32) NOT NULL COMMENT '商品名称',  
  11.   `price` float(10,1) NOT NULL COMMENT '商品定价',  
  12.   `detail` text COMMENT '商品描述',  
  13.   `pic` varchar(64) DEFAULT NULL COMMENT '商品图片',  
  14.   `createtime` datetime NOT NULL COMMENT '生产日期',  
  15.   PRIMARY KEY (`id`)  
  16. ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;  
  17.   
  18. /*Table structure for table `orderdetail` */  
  19.   
  20. CREATE TABLE `orderdetail` (  
  21.   `id` int(11) NOT NULL AUTO_INCREMENT,  
  22.   `orders_id` int(11) NOT NULL COMMENT '订单id',  
  23.   `items_id` int(11) NOT NULL COMMENT '商品id',  
  24.   `items_num` int(11) DEFAULT NULL COMMENT '商品购买数量',  
  25.   PRIMARY KEY (`id`),  
  26.   KEY `FK_orderdetail_1` (`orders_id`),  
  27.   KEY `FK_orderdetail_2` (`items_id`),  
  28.   CONSTRAINT `FK_orderdetail_1` FOREIGN KEY (`orders_id`) REFERENCES `orders` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,  
  29.   CONSTRAINT `FK_orderdetail_2` FOREIGN KEY (`items_id`) REFERENCES `items` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION  
  30. ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;  
  31.   
  32. /*Table structure for table `orders` */  
  33.   
  34. CREATE TABLE `orders` (  
  35.   `id` int(11) NOT NULL AUTO_INCREMENT,  
  36.   `user_id` int(11) NOT NULL COMMENT '下单用户id',  
  37.   `number` varchar(32) NOT NULL COMMENT '订单号',  
  38.   `createtime` datetime NOT NULL COMMENT '创建订单时间',  
  39.   `note` varchar(100) DEFAULT NULL COMMENT '备注',  
  40.   PRIMARY KEY (`id`),  
  41.   KEY `FK_orders_1` (`user_id`),  
  42.   CONSTRAINT `FK_orders_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION  
  43. ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;  
  44.   
  45. /*Table structure for table `user` */  
  46.   
  47. CREATE TABLE `user` (  
  48.   `id` int(11) NOT NULL AUTO_INCREMENT,  
  49.   `username` varchar(32) NOT NULL COMMENT '用户名称',  
  50.   `birthday` date DEFAULT NULL COMMENT '生日',  
  51.   `sex` char(1) DEFAULT NULL COMMENT '性别',  
  52.   `address` varchar(256) DEFAULT NULL COMMENT '地址',  
  53.   PRIMARY KEY (`id`)  
  54. ) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8;  
插入数据:

[java]  view plain  copy
 print ?
  1. /* 
  2. SQLyog v10.2  
  3. MySQL - 5.1.72-community : Database - mybatis 
  4. ********************************************************************* 
  5. */  
  6. /*Data for the table `items` */  
  7.   
  8. insert  into `items`(`id`,`name`,`price`,`detail`,`pic`,`createtime`) values (1,'台式机',3000.0,'该电脑质量非常好!!!!',NULL,'2016-02-03 13:22:53'),(2,'笔记本',6000.0,'笔记本性能好,质量好!!!!!',NULL,'2015-02-09 13:22:57'),(3,'背包',200.0,'名牌背包,容量大质量好!!!!',NULL,'2016-02-06 13:23:02');  
  9.   
  10. /*Data for the table `orderdetail` */  
  11.   
  12. insert  into `orderdetail`(`id`,`orders_id`,`items_id`,`items_num`) values (1,3,1,1),(2,3,2,3),(3,4,3,4),(4,4,2,3);  
  13.   
  14. /*Data for the table `orders` */  
  15.   
  16. insert  into `orders`(`id`,`user_id`,`number`,`createtime`,`note`) values (3,1,'1000010','2016-02-04 13:22:35',NULL),(4,1,'1000011','2016-02-03 13:22:41',NULL),(5,10,'1000012','2016-02-12 16:13:23',NULL);  
  17.   
  18. /*Data for the table `user` */  
  19.   
  20. insert  into `user`(`id`,`username`,`birthday`,`sex`,`address`) values (1,'王五',NULL,'2',NULL),(10,'张三','2016-07-10','1','北京市'),(16,'张小明',NULL,'1','河南郑州'),(22,'陈小明',NULL,'1','河南郑州'),(24,'张三丰',NULL,'1','河南郑州'),(25,'陈小明',NULL,'1','河南郑州'),(26,'王五',NULL,NULL,NULL);  



1.2、pom.xml文件

[java]  view plain  copy
 print ?
  1. "http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  3.     4.0.0  
  4.     web-test-com  
  5.     MyBatis  
  6.     0.0.1-SNAPSHOT  
  7.     war  
  8.   
  9.       
  10.   
  11.   
  12.           
  13.             junit  
  14.             junit  
  15.             4.12  
  16.             provided  
  17.           
  18.   
  19.           
  20.             log4j  
  21.             log4j  
  22.             1.2.17  
  23.           
  24.   
  25.           
  26.             org.mybatis  
  27.             mybatis  
  28.             3.1.1  
  29.           
  30.           
  31.             mysql  
  32.             mysql-connector-java  
  33.             5.1.38  
  34.           
  35.   
  36.       
  37.   
  38.   
  39.   

1.3、SqlMappingConfig.xml文件

[java]  view plain  copy
 print ?
  1. "1.0" encoding="UTF-8" ?>  
  2. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
  3. "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  4.   
  5.   
  6.       
  7.     "db.properties">  
  8.           
  9.           
  10.       
  11.   
  12.       
  13.       
  14.   
  15.       
  16.           
  17.           
  18.           
  19.         "cn.com.czy.mybatis.pojo.User" alias="user" />  
  20.           
  21.         <package name="cn.com.mybatis.mapper" />  
  22.       
  23.   
  24.       
  25.     default="development">  
  26.         "development">  
  27.               
  28.             "JDBC" />  
  29.               
  30.             "POOLED">  
  31.                 "driver" value="${jdbc.driver}" />  
  32.                 "url" value="${jdbc.url}" />  
  33.                 "username" value="${jdbc.username}" />  
  34.                 "password" value="${jdbc.password}" />  
  35.               
  36.           
  37.       
  38.   
  39.   
  40.       
  41.       
  42.       
  43.       
  44.           
  45.                   
  46.                "sqlMapper/user.xml" />  
  47.         "sqlMapper/userMapper.xml" />  
  48.         "sqlMapper/OrdersMapperCustom.xml"/>  
  49.   
  50.           
  51.           
  52.           
  53.           
  54.       
  55.   
  56.   

1.4、user.xml文件(注意在SqlMappingConfig.xml文件中已经引用它)

[java]  view plain  copy
 print ?
  1. "1.0" encoding="UTF-8" ?>  
  2. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  4.   
  5. "test">  
  6.   
  7.       
  8.       
  9.       
  10.       
  11.       
  12.       
  13.     "findUserById" parameterType="int"  resultType="user">  
  14.         SELECT * FROM USER WHERE id=#{value}  
  15.       
  16.   
1.5、测试类

[java]  view plain  copy
 print ?
  1. package cn.com.czy.mybatis.first;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.InputStream;  
  5. import java.util.Date;  
  6. import java.util.List;  
  7.   
  8. import org.apache.ibatis.io.Resources;  
  9. import org.apache.ibatis.session.SqlSession;  
  10. import org.apache.ibatis.session.SqlSessionFactory;  
  11. import org.apache.ibatis.session.SqlSessionFactoryBuilder;  
  12. import cn.com.czy.mybatis.pojo.User;  
  13. import org.junit.Test;  
  14.   
  15. /** 
  16.  * 《单表映射》 
  17.  * 入门程序总结:这是简单的mybatis入门程序 
  18.  * -- 1、映射(mapper)文件是user.xml --  --  
  19.  * -- 2、逻辑基本的resultType、parameterType等一下基础知识  --  --  
  20.  * -- 3、SqlSessionFactory、SqlSession的原理  --  --  
  21.  */  
  22. public class MybatisFirst {  
  23.   
  24.     public SqlSessionFactory getSqlSessionFactory() throws IOException {  
  25.         // mybatis配置文件  
  26.         String resource = "config/SqlMapConfig.xml";  
  27.         // 得到配置文件流  
  28.         InputStream inputStream = Resources.getResourceAsStream(resource);  
  29.         // 创建会话工厂,传入mybatis的配置文件信息  
  30.         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);  
  31.         return sqlSessionFactory;  
  32.     }  
  33.   
  34.     // 根据id查询用户信息,得到一条记录结果  
  35.     @Test  
  36.     public void findUserByIdTest() throws IOException {  
  37.   
  38.         // 通过工厂得到SqlSession  
  39.         SqlSession sqlSession = this.getSqlSessionFactory().openSession();  
  40.   
  41.         // 通过SqlSession操作数据库  
  42.         // 第一个参数:映射文件中statement的id,等于=namespace+"."+statement的id  
  43.         // 第二个参数:指定和映射文件中所匹配的parameterType类型的参数  
  44.         // sqlSession.selectOne结果 是与映射文件中所匹配的resultType类型的对象  
  45.           
  46.                 // selectOne查询出一条记录(这种很麻烦的!!!往后看看)  
  47.         User user = sqlSession.selectOne("test.findUserById"1);  
  48.         System.out.println(user);  
  49.         // 释放资源  
  50.         sqlSession.close();  
  51.     }  
  52. }  

你竟然看到这里了、不错哦!往下看、实际开发中是下面那种方式!加油、带上梦想生活!

1.6、selectOne和selectList

selectOne表示查询出一条记录进行映射。如果使用selectOne可以实现使用selectList也可以实现(list中只有一个对象)。

selectList表示查询出一个列表(多条记录)进行映射。如果使用selectList查询多条记录,不能使用selectOne。


总结:mybatis和hibernate本质区别和应用场景

hibernate:是一个标准ORM框架(对象关系映射)。入门门槛较高的,不需要程序写sqlsql语句自动生成了。

对sql语句进行优化、修改比较困难的。

 

mybatis:专注是sql本身,需要程序员自己编写sql语句,sql修改、优化比较方便。mybatis是一个不完全ORM框架,虽然程序员自己写sql,mybatis 也可以实现映射(输入映射、输出映射)。


      


2.1、传统的方式写mybatis的应用程序

2.3、环境搭建

pom.xml文件

[java]  view plain  copy
 print ?
  1. "font-size:18px;">"http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  3.     4.0.0  
  4.     web-test-com  
  5.     MyBatis  
  6.     0.0.1-SNAPSHOT  
  7.     war  
  8.   
  9.       
  10.   
  11.           
  12.             junit  
  13.             junit  
  14.             4.12  
  15.             provided  
  16.           
  17.   
  18.           
  19.             log4j  
  20.             log4j  
  21.             1.2.17  
  22.           
  23.   
  24.           
  25.             org.mybatis  
  26.             mybatis  
  27.             3.1.1  
  28.           
  29.           
  30.             mysql  
  31.             mysql-connector-java  
  32.             5.1.38  
  33.           
  34.   
  35.       
  36.   
  37.   
  38.   

2.4、SqlMappingConfig.xml文件(学会看注释、你就入门了!!!别说我只贴代码不给解释!!!)

[java]  view plain  copy
 print ?
  1. "1.0" encoding="UTF-8" ?>  
  2. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
  3. "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  4.   
  5.   
  6.       
  7.     "db.properties">  
  8.           
  9.           
  10.       
  11.   
  12.       
  13.       
  14.   
  15.       
  16.           
  17.           
  18.           
  19.         "cn.com.czy.mybatis.pojo.User" alias="user" />  
  20.           
  21.         <package name="cn.com.mybatis.mapper" />  
  22.       
  23.   
  24.       
  25.     default="development">  
  26.         "development">  
  27.               
  28.             "JDBC" />  
  29.               
  30.             "POOLED">  
  31.                 "driver" value="${jdbc.driver}" />  
  32.                 "url" value="${jdbc.url}" />  
  33.                 "username" value="${jdbc.username}" />  
  34.                 "password" value="${jdbc.password}" />  
  35.               
  36.           
  37.       
  38.   
  39.   
  40.       
  41.       
  42.       
  43.       
  44.           
  45.         "sqlMapper/user.xml" />  
  46.         "sqlMapper/userMapper.xml" />  
  47.         "sqlMapper/OrdersMapperCustom.xml"/>  
  48.   
  49.           
  50.           
  51.           
  52.           
  53.       
  54.   
  55.   


2.5、映射文件user.xml(注意在SqlMappingConfig.xml文件中已经引用它)

[java]  view plain  copy
 print ?
  1. "font-size:18px;">"1.0" encoding="UTF-8" ?>  
  2. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  4.   
  5.   
  6.   
  7.   
  8. "test">  
  9.   
  10.       
  11.       
  12.       
  13.       
  14.       
  15.       
  16.     "findUserById" parameterType="int"  
  17.         resultType="user">  
  18.           
  19.         SELECT * FROM USER WHERE id=#{value}  
  20.       
  21.   
  22.       
  23.       
  24.       
  25.       
  26.     "findUserByName" parameterType="java.lang.String"  
  27.         resultType="user">  
  28.           
  29.         SELECT * FROM USER WHERE username LIKE '%${value}%'  
  30.       
  31.   
  32.       
  33.        
  34.       
  35.     "insertUser" parameterType="user">  
  36.           
  37.           
  38.           
  39.           
  40.         "id" order="AFTER" resultType="java.lang.Integer">  
  41.               
  42.             SELECT LAST_INSERT_ID()  
  43.           
  44.         insert into user(username,birthday,sex,address)  
  45.         value(#{username},#{birthday},#{sex},#{address})  
  46.           
  47.           
  48.           
  49.           
  50.           
  51.       
  52.   
  53.   
  54.     "deleteUser" parameterType="java.lang.Integer">  
  55.           
  56.         delete from user where  
  57.         id=#{id}  
  58.       
  59.   
  60.   
  61.       
  62.       
  63.       
  64.     "updateUser" parameterType="user">  
  65.           
  66.         update user set  
  67.         username=#{username},birthday=#{birthday},sex=#{sex},address=#{address}  
  68.         where id=#{id}  
  69.       
  70.   
  71.   
  72.   
  73.   
  74.   

2.6、pojo类
[java]  view plain  copy
 print ?
  1. "font-size:18px;">package cn.com.czy.mybatis.pojo;  
  2.   
  3. import java.util.Date;  
  4.   
  5.   
  6. /** 
  7.  *  
  8.  * 

    Title: User

     
  9.  * 

    Description:用户pojo 

     
  10.  */  
  11. public class User {  
  12.       
  13.     //属性名和数据库表的字段对应  
  14.     private int id;  
  15.     private String username;    // 用户姓名  
  16.     private String sex;     // 性别  
  17.     private Date birthday;      // 生日  
  18.     private String address;     // 地址  
  19.       
  20.     public int getId() {  
  21.         return id;  
  22.     }  
  23.     public void setId(int id) {  
  24.         this.id = id;  
  25.     }  
  26.     public String getUsername() {  
  27.         return username;  
  28.     }  
  29.     public void setUsername(String username) {  
  30.         this.username = username;  
  31.     }  
  32.     public String getSex() {  
  33.         return sex;  
  34.     }  
  35.     public void setSex(String sex) {  
  36.         this.sex = sex;  
  37.     }  
  38.     public Date getBirthday() {  
  39.         return birthday;  
  40.     }  
  41.     public void setBirthday(Date birthday) {  
  42.         this.birthday = birthday;  
  43.     }  
  44.     public String getAddress() {  
  45.         return address;  
  46.     }  
  47.     public void setAddress(String address) {  
  48.         this.address = address;  
  49.     }  
  50.     @Override  
  51.     public String toString() {  
  52.         return "User [id=" + id + ", username=" + username + ", sex=" + sex  
  53.                 + ", birthday=" + birthday + ", address=" + address + "]";  
  54.     }  
  55.   
  56.   
  57. }  
  58.   



2.7、测试类(传统的不用接口、只是简单的)

[java]  view plain  copy
 print ?
  1. package cn.com.czy.mybatis.first;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.InputStream;  
  5. import java.util.Date;  
  6. import java.util.List;  
  7.   
  8. import org.apache.ibatis.io.Resources;  
  9. import org.apache.ibatis.session.SqlSession;  
  10. import org.apache.ibatis.session.SqlSessionFactory;  
  11. import org.apache.ibatis.session.SqlSessionFactoryBuilder;  
  12. import cn.com.czy.mybatis.pojo.User;  
  13. import org.junit.Test;  
  14.   
  15. /** 
  16.  * 《单表映射》 
  17.  * 入门程序总结:这是简单的mybatis入门程序 
  18.  * -- 1、映射(mapper)文件是user.xml --  --  
  19.  * -- 2、逻辑基本的resultType、parameterType等一下基础知识  --  --  
  20.  * -- 3、SqlSessionFactory、SqlSession的原理  --  --  
  21.  */  
  22. public class MybatisFirst {  
  23.   
  24.     public SqlSessionFactory getSqlSessionFactory() throws IOException {  
  25.         // mybatis配置文件  
  26.         String resource = "config/SqlMapConfig.xml";  
  27.         // 得到配置文件流  
  28.         InputStream inputStream = Resources.getResourceAsStream(resource);  
  29.         // 创建会话工厂,传入mybatis的配置文件信息  
  30.         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);  
  31.         return sqlSessionFactory;  
  32.     }  
  33.   
  34.       
  35.   
  36.     // 根据id查询用户信息,得到一条记录结果  
  37.     @Test  
  38.     public void findUserByIdTest() throws IOException {  
  39.   
  40.         // 通过工厂得到SqlSession  
  41.         SqlSession sqlSession = this.getSqlSessionFactory().openSession();  
  42.   
  43.         // 通过SqlSession操作数据库  
  44.         // 第一个参数:映射文件中statement的id,等于=namespace+"."+statement的id  
  45.         // 第二个参数:指定和映射文件中所匹配的parameterType类型的参数  
  46.         // sqlSession.selectOne结果 是与映射文件中所匹配的resultType类型的对象  
  47.         // selectOne查询出一条记录  
  48.         User user = sqlSession.selectOne("test.findUserById"1);  
  49.   
  50.         System.out.println(user);  
  51.   
  52.         // 释放资源  
  53.         sqlSession.close();  
  54.   
  55.     }  
  56.   
  57.     // 根据用户名称模糊查询用户列表  
  58.     @Test  
  59.     public void findUserByNameTest() throws IOException {  
  60.   
  61.         // 通过工厂得到SqlSession  
  62.         SqlSession sqlSession = this.getSqlSessionFactory().openSession();  
  63.         // list中的user和映射文件中resultType所指定的类型一致  
  64.         List list = sqlSession.selectList("test.findUserByName""小明");  
  65.         System.out.println("信息:" + list);  
  66.         sqlSession.close();  
  67.   
  68.     }  
  69.   
  70.     // 添加用户信息  
  71.     @Test  
  72.     public void insertUserTest() throws IOException {  
  73.   
  74.         // 通过工厂得到SqlSession  
  75.         SqlSession sqlSession = this.getSqlSessionFactory().openSession();  
  76.         // 插入用户对象  
  77.         User user = new User();  
  78.         user.setUsername("王小军");  
  79.         user.setBirthday(new Date());  
  80.         user.setSex("1");  
  81.         user.setAddress("河南郑州");  
  82.   
  83.         sqlSession.insert("test.insertUser", user);  
  84.   
  85.         // 提交事务  
  86.         sqlSession.commit();  
  87.   
  88.         // 获取用户信息主键  
  89.         System.out.println(user.getId());  
  90.         // 关闭会话  
  91.         sqlSession.close();  
  92.   
  93.     }  
  94.   
  95.     // 根据id删除 用户信息  
  96.     @Test  
  97.     public void deleteUserTest() throws IOException {  
  98.   
  99.         // 通过工厂得到SqlSession  
  100.         SqlSession sqlSession = this.getSqlSessionFactory().openSession();  
  101.   
  102.         // 传入id删除 用户  
  103.         sqlSession.delete("test.deleteUser"49);  
  104.   
  105.         // 提交事务  
  106.         sqlSession.commit();  
  107.   
  108.         // 关闭会话  
  109.         sqlSession.close();  
  110.   
  111.     }  
  112.   
  113.     // 更新用户信息  
  114.     @Test  
  115.     public void updateUserTest() throws IOException {  
  116.   
  117.         // 通过工厂得到SqlSession  
  118.         SqlSession sqlSession = this.getSqlSessionFactory().openSession();  
  119.         // 更新用户信息  
  120.   
  121.         User user = new User();  
  122.         // 必须设置id  
  123.         user.setId(41);  
  124.         user.setUsername("王大军");  
  125.         user.setBirthday(new Date());  
  126.         user.setSex("2");  
  127.         user.setAddress("河南郑州");  
  128.   
  129.         sqlSession.update("test.updateUser", user);  
  130.   
  131.         // 提交事务  
  132.         sqlSession.commit();  
  133.   
  134.         // 关闭会话  
  135.         sqlSession.close();  
  136.   
  137.     }  
  138.   
  139. }  


3.1、我们用mapper代理方法来实现(实际开发用到的)

1、pom.xml文件一样

2、SqlMappingConfig.xml一样

3、开发规范:

我们编写mapper接口需要遵循一些开发规范,mybatis可以自动生成mapper接口实现类代理对象。

3.2、接口UserMapping.xml文件(可能有点多、你挑着看就好了、学会查询就会别的!!!)

(注意在SqlMappingConfig.xml文件中已经引用它)

[java]  view plain  copy
 print ?
  1. "1.0" encoding="UTF-8" ?>  
  2. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  4.   
  5.   
  6.   
  7.   
  8.   
  9. "cn.com.mybatis.mapper.UserMapper">  
  10.   
  11.       
  12.       
  13.       
  14.     "query_user_where">  
  15.         <if test="userCustom!=null">  
  16.             <if test="userCustom.sex!=null and userCustom.sex!=''">  
  17.                 and user.sex = #{userCustom.sex}  
  18.             if>  
  19.             <if test="userCustom.username!=null and userCustom.username!=''">  
  20.                 and user.username LIKE '%${userCustom.username}%'  
  21.             if>  
  22.         if>  
  23.       
  24.   
  25.       
  26.       
  27.       
  28.       
  29.     "findUserList" parameterType="UserQueryVo"  
  30.         resultType="UserCustom">  
  31.         SELECT * FROM USER  
  32.           
  33.           
  34.               
  35.             "query_user_where">  
  36.               
  37.           
  38.       
  39.   
  40.       
  41.     "findUserCount" parameterType="UserQueryVo"  
  42.         resultType="int">  
  43.         SELECT count(*) FROM USER  
  44.           
  45.           
  46.               
  47.             "query_user_where">  
  48.               
  49.           
  50.       
  51.   
  52.       
  53.       
  54.       
  55.       
  56.       
  57.       
  58.       
  59.       
  60.       
  61.       
  62.       
  63.       
  64.     "findUserById" parameterType="int" resultType="user">  
  65.         SELECT * FROM USER WHERE id=#{value}  
  66.       
  67.   
  68.       
  69.     "findUserByName" parameterType="java.lang.String"  
  70.         resultType="user">  
  71.         SELECT * FROM USER WHERE username LIKE '%${value}%'  
  72.       
  73.   
  74.   
  75.   
  76.       
  77.       
  78.       
  79.       
  80.     "user" id="userResultMap">  
  81.           
  82.           
  83.           
  84.         "id_" property="id" />  
  85.           
  86.           
  87.           
  88.         "username_" property="username" />  
  89.       
  90.   
  91.       
  92.       
  93.     "findUserByIdResultMap" parameterType="int"  
  94.         resultMap="userResultMap">  
  95.         SELECT id id_,username username_ FROM USER WHERE id=#{value}  
  96.       
  97.   
  98.   
  99.   

3.3、UserMapping.java类

[java]  view plain  copy
 print ?
  1. package cn.com.mybatis.mapper;  
  2.   
  3. import java.util.List;  
  4.   
  5. import cn.com.czy.mybatis.pojo.User;  
  6.   
  7. /** 
  8.  * 总结: 
  9.  * 1、mapper代理方式、理解mapper开发规范  
  10.  * 2、mapper文件是usermapper.xml 
  11.  * 3、了解动态sql、别名、sql代码片、 
  12.  * 4、了解  resultMap 
  13.  *  
  14.  * 

     

  15.  * Title: UserMapper 
  16.  * 

     
  17.  * 

     

  18.  * Description: mapper接口,相当 于dao接口,用户管理 
  19.  * 

     
  20.  */  
  21. public interface UserMapper {  
  22.   
  23.     // 根据id查询用户信息  
  24.     public User findUserById(int id) throws Exception;  
  25.   
  26.     // 根据用户名列查询用户列表  
  27.     public List findUserByName(String name) throws Exception;  
  28.   
  29.     // 根据id查询用户信息,使用resultMap输出  
  30.     public User findUserByIdResultMap(int id) throws Exception;  
  31.   
  32.     // 用户信息综合查询  
  33.     public List findUserList(UserQueryVo userQueryVo) throws Exception;  
  34.   
  35.     // 用户信息综合查询总数  
  36.     public int findUserCount(UserQueryVo userQueryVo) throws Exception;  
  37.   
  38.     // 插入用户  
  39.     public void insertUser(User user) throws Exception;  
  40.   
  41.     // 删除用户  
  42.     public void deleteUser(int id) throws Exception;  
  43.   
  44. }  

3.3、包装类、继承类(这些只是为了以后更好的拓展罢了)

UserMapping的子类

[java]  view plain  copy
 print ?
  1. package cn.com.mybatis.mapper;  
  2.   
  3. import cn.com.czy.mybatis.pojo.User;  
  4.   
  5. /** 
  6.  * 总结: 
  7.  * 1、mapper代理方式、理解mapper开发规范  
  8.  * 2、mapper文件是usermapper.xml 
  9.  * 3、了解动态sql、别名、sql代码片、 
  10.  * 4、了解  resultMap 
  11.  *  
  12.  * 

    Title: UserCustom

     
  13.  * 

    Description: 用户的扩展类

     
  14.  */  
  15. public class UserCustom extends User{  
  16.       
  17.     //可以扩展用户的信息  
  18.   
  19. }  

UserMapping的包装类
[java]  view plain  copy
 print ?
  1. package cn.com.mybatis.mapper;  
  2.   
  3.   
  4. /** 
  5.  * 总结: 
  6.  * 1、mapper代理方式、理解mapper开发规范  
  7.  * 2、mapper文件是usermapper.xml 
  8.  * 3、了解动态sql、别名、sql代码片、 
  9.  * 4、了解  resultMap 
  10.  *  
  11.  * 

    Title: UserQueryVo

     
  12.  * 

    Description:包装类型 

     
  13.  */  
  14. public class UserQueryVo {  
  15.       
  16.       
  17.     //在这里包装所需要的查询条件  
  18.       
  19.     //用户查询条件  
  20.     private UserCustom userCustom;  
  21.   
  22.     public UserCustom getUserCustom() {  
  23.         return userCustom;  
  24.     }  
  25.   
  26.     public void setUserCustom(UserCustom userCustom) {  
  27.         this.userCustom = userCustom;  
  28.     }  
  29.   
  30.     //可以包装其它的查询条件,订单、商品  
  31.     //....  
  32. }  

3.5测试类

[java]  view plain  copy
 print ?
  1. package cn.com.mybatis.mapper;  
  2.   
  3. import java.io.InputStream;  
  4. import java.util.List;  
  5.   
  6. import org.apache.ibatis.io.Resources;  
  7. import org.apache.ibatis.session.SqlSession;  
  8. import org.apache.ibatis.session.SqlSessionFactory;  
  9. import org.apache.ibatis.session.SqlSessionFactoryBuilder;  
  10. import org.junit.Before;  
  11. import org.junit.Test;  
  12.   
  13. import cn.com.czy.mybatis.pojo.User;  
  14.   
  15. /* 
  16.  *  
  17.  * 总结: 
  18.  * 1、mapper代理方式、理解mapper开发规范  
  19.  * 2、mapper文件是usermapper.xml 
  20.  * 3、了解动态sql、别名、sql代码片、 
  21.  * 4、了解  resultMap 
  22.  * 
  23.  */  
  24. public class UserMapperTest {  
  25.   
  26.     private SqlSessionFactory sqlSessionFactory;  
  27.   
  28.     // 此方法是在执行testFindUserById之前执行  
  29.     @Before  
  30.     public void setUp() throws Exception {  
  31.   
  32.         // mybatis配置文件  
  33.         String resource = "config/SqlMapConfig.xml";  
  34.         // 得到配置文件流  
  35.         InputStream inputStream = Resources.getResourceAsStream(resource);  
  36.   
  37.         // 创建会话工厂,传入mybatis的配置文件信息  
  38.         sqlSessionFactory = new SqlSessionFactoryBuilder()  
  39.                 .build(inputStream);  
  40.     }  
  41.   
  42.     //用户信息的综合 查询  
  43.     @Test  
  44.     public void testFindUserList() throws Exception {  
  45.           
  46.         SqlSession sqlSession = sqlSessionFactory.openSession();  
  47.           
  48.         //创建UserMapper对象,mybatis自动生成mapper代理对象  
  49.         UserMapper userMapper = sqlSession.getMapper(UserMapper.class);  
  50.           
  51.         //创建包装对象,设置查询条件  
  52.         UserQueryVo userQueryVo = new UserQueryVo();  
  53.         UserCustom userCustom = new UserCustom();  
  54.         userCustom.setSex("1");  
  55.         userCustom.setUsername("郑游");  
  56.         userQueryVo.setUserCustom(userCustom);  
  57.           
  58.         //调用userMapper的方法  
  59.         List list = userMapper.findUserList(userQueryVo);  
  60.           
  61.         System.out.println(list);  
  62.     }  
  63.       
  64.       
  65.       
  66.     @Test  
  67.     public void testFindUserCount() throws Exception {  
  68.           
  69.         SqlSession sqlSession = sqlSessionFactory.openSession();  
  70.           
  71.         //创建UserMapper对象,mybatis自动生成mapper代理对象  
  72.         UserMapper userMapper = sqlSession.getMapper(UserMapper.class);  
  73.           
  74.         //创建包装对象,设置查询条件  
  75.         UserQueryVo userQueryVo = new UserQueryVo();  
  76.         UserCustom userCustom = new UserCustom();  
  77.         userCustom.setSex("1");  
  78.         userCustom.setUsername("郑游");  
  79.         userQueryVo.setUserCustom(userCustom);  
  80.         //调用userMapper的方法  
  81.         int count = userMapper.findUserCount(userQueryVo);  
  82.           
  83.         System.out.println(count);  
  84.     }  
  85.       
  86.       
  87.       
  88.     @Test  
  89.     public void testFindUserById() throws Exception {  
  90.           
  91.         SqlSession sqlSession = sqlSessionFactory.openSession();  
  92.           
  93.         //创建UserMapper对象,mybatis自动生成mapper代理对象  
  94.         UserMapper userMapper = sqlSession.getMapper(UserMapper.class);  
  95.           
  96.         //调用userMapper的方法  
  97.           
  98.         User user = userMapper.findUserById(1);  
  99.           
  100.         System.out.println(user);  
  101.           
  102.           
  103.     }  
  104.       
  105.       
  106.     @Test  
  107.     public void testFindUserByName() throws Exception {  
  108.           
  109.         SqlSession sqlSession = sqlSessionFactory.openSession();  
  110.           
  111.         //创建UserMapper对象,mybatis自动生成mapper代理对象  
  112.         UserMapper userMapper = sqlSession.getMapper(UserMapper.class);  
  113.           
  114.         //调用userMapper的方法  
  115.           
  116.         List list = userMapper.findUserByName("小明");  
  117.           
  118.         sqlSession.close();  
  119.           
  120.         System.out.println(list);  
  121.           
  122.           
  123.     }  
  124.       
  125.     @Test  
  126.     public void testFindUserByIdResultMap() throws Exception {  
  127.           
  128.         SqlSession sqlSession = sqlSessionFactory.openSession();  
  129.           
  130.         //创建UserMapper对象,mybatis自动生成mapper代理对象  
  131.         UserMapper userMapper = sqlSession.getMapper(UserMapper.class);  
  132.           
  133.         //调用userMapper的方法  
  134.           
  135.         User user = userMapper.findUserByIdResultMap(1);  
  136.           
  137.         System.out.println(user);  
  138.           
  139.     }  
  140.   

  1. }  
来自:http://blog.csdn.net/javawebrookie/article/details/52654526

你可能感兴趣的:(Mybatis)