mybatis第一天01

MyBatis的学习01

1.mybatis简介:

1.1mybatis名称的由来

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

1.2mybatis是什么?

  MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。

2.入门案例

2.1需求分析:

对订单商品案例中的用户表进行增删改查操作

① 根据用户ID查询用户信息

② 根据用户名称模糊查询用户列表

③ 添加用户

④ 删除用户(练习)

⑤ 修改用户(练习)

2.2选择环境:

Jdk1.8、Ide:eclipseMybatis3.2.7、数据库:MySQL 5X

2.3mybatis下载:

下载路径:https://github.com/mybatis/mybatis-3/releases

下载解压后的文件目录

2.4sql脚本:

 

Insert_Table
 1 /*
 2 SQLyog v10.2 
 3 MySQL - 5.1.72-community : Database - mybatis
 4 *********************************************************************
 5 */
 6 
 7 
 8 /*!40101 SET NAMES utf8 */;
 9 
10 /*!40101 SET SQL_MODE=''*/;
11 
12 /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
13 /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
14 /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
15 /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
16 /*Data for the table `items` */
17 
18 insert  into `items`(`id`,`name`,`price`,`detail`,`pic`,`createtime`) values (1,'台式机',3000.0,'该电脑质量非常好!!!!',NULL,'2015-02-03 13:22:53'),(2,'笔记本',6000.0,'笔记本性能好,质量好!!!!!',NULL,'2015-02-09 13:22:57'),(3,'背包',200.0,'名牌背包,容量大质量好!!!!',NULL,'2015-02-06 13:23:02');
19 
20 /*Data for the table `orderdetail` */
21 
22 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);
23 
24 /*Data for the table `orders` */
25 
26 insert  into `orders`(`id`,`user_id`,`number`,`createtime`,`note`) values (3,1,'1000010','2015-02-04 13:22:35',NULL),(4,1,'1000011','2015-02-03 13:22:41',NULL),(5,10,'1000012','2015-02-12 16:13:23',NULL);
27 
28 /*Data for the table `user` */
29 
30 insert  into `user`(`id`,`username`,`birthday`,`sex`,`address`) values (1,'王五',NULL,'2',NULL),(10,'张三','2014-07-10','1','北京市'),(16,'张小明',NULL,'1','河南郑州'),(22,'陈小明',NULL,'1','河南郑州'),(24,'张三丰',NULL,'1','河南郑州'),(25,'陈小明',NULL,'1','河南郑州'),(26,'王五',NULL,NULL,NULL);
31 
32 /*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
33 /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
34 /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
35 /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

 

 1 /*
 2 SQLyog v10.2 
 3 MySQL - 5.1.72-community : Database - mybatis
 4 *********************************************************************
 5 */
 6 
 7 
 8 /*!40101 SET NAMES utf8 */;
 9 
10 /*!40101 SET SQL_MODE=''*/;
11 
12 /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
13 /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
14 /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
15 /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
16 /*Table structure for table `items` */
17 
18 CREATE TABLE `items` (
19   `id` int(11) NOT NULL AUTO_INCREMENT,
20   `name` varchar(32) NOT NULL COMMENT '商品名称',
21   `price` float(10,1) NOT NULL COMMENT '商品定价',
22   `detail` text COMMENT '商品描述',
23   `pic` varchar(64) DEFAULT NULL COMMENT '商品图片',
24   `createtime` datetime NOT NULL COMMENT '生产日期',
25   PRIMARY KEY (`id`)
26 ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
27 
28 /*Table structure for table `orderdetail` */
29 
30 CREATE TABLE `orderdetail` (
31   `id` int(11) NOT NULL AUTO_INCREMENT,
32   `orders_id` int(11) NOT NULL COMMENT '订单id',
33   `items_id` int(11) NOT NULL COMMENT '商品id',
34   `items_num` int(11) DEFAULT NULL COMMENT '商品购买数量',
35   PRIMARY KEY (`id`),
36   KEY `FK_orderdetail_1` (`orders_id`),
37   KEY `FK_orderdetail_2` (`items_id`),
38   CONSTRAINT `FK_orderdetail_1` FOREIGN KEY (`orders_id`) REFERENCES `orders` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
39   CONSTRAINT `FK_orderdetail_2` FOREIGN KEY (`items_id`) REFERENCES `items` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
40 ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
41 
42 /*Table structure for table `orders` */
43 
44 CREATE TABLE `orders` (
45   `id` int(11) NOT NULL AUTO_INCREMENT,
46   `user_id` int(11) NOT NULL COMMENT '下单用户id',
47   `number` varchar(32) NOT NULL COMMENT '订单号',
48   `createtime` datetime NOT NULL COMMENT '创建订单时间',
49   `note` varchar(100) DEFAULT NULL COMMENT '备注',
50   PRIMARY KEY (`id`),
51   KEY `FK_orders_1` (`user_id`),
52   CONSTRAINT `FK_orders_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
53 ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
54 
55 /*Table structure for table `user` */
56 
57 CREATE TABLE `user` (
58   `id` int(11) NOT NULL AUTO_INCREMENT,
59   `username` varchar(32) NOT NULL COMMENT '用户名称',
60   `birthday` date DEFAULT NULL COMMENT '生日',
61   `sex` char(1) DEFAULT NULL COMMENT '性别',
62   `address` varchar(256) DEFAULT NULL COMMENT '地址',
63   PRIMARY KEY (`id`)
64 ) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8;
65 
66 /*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
67 /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
68 /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
69 /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
Create_Table

2.5po类创建

 1 public class User {
 2     public int id;
 3     public String username;
 4     public String sex;
 5     public Date birthday;
 6     public String address;
 7     public int getId() {
 8         return id;
 9     }
10     public void setId(int id) {
11         this.id = id;
12     }
13     public String getUsername() {
14         return username;
15     }
16     public void setUsername(String username) {
17         this.username = username;
18     }
19     public String getSex() {
20         return sex;
21     }
22     public void setSex(String sex) {
23         this.sex = sex;
24     }
25     public Date getBirthday() {
26         return birthday;
27     }
28     public void setBirthday(Date birthday) {
29         this.birthday = birthday;
30     }
31     public String getAddress() {
32         return address;
33     }
34     public void setAddress(String address) {
35         this.address = address;
36     }
37     @Override
38     public String toString() {
39         return "User [id=" + id + ", username=" + username + ", sex=" + sex + ", birthday=" + birthday + ", address="
40                 + address + "]";
41     }
42     
43 }
User的po类

2.6创建config源文件夹并在下面创建MyBatis的SqlMapConfig.xml全局配置文件和映射文件User.xml

 

 

①创建全局配置文件和类映射文件时需要导入DTD约束,这个约束头可以在mybatis-3.2.7.pdf中找到,不过那个是从网络下加载约束,也可以去官网去下载约束文件进行本地配置。

②SqlMapCongfig.xml文件名称虽然没有限定叫什么名字但是最好取这个名字,约定俗成的东西。

注意:加载映射文件的<mappers><mapper resource="XML相对路径"></mappers>。<mapper>标签是指定一个映射文件<package>标签是批量指定映射文件的(注意批量指定映射文件有特殊限定:①与特定PO类名称相同②需要与特定PO类在同一个包下)其他详细配置和注释见下面代码

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE configuration
 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4 "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <configuration>
 6 <!-- 加载db.properties配置文件 -->
 7 <properties resource="db.properties">
 8 <!-- 这个明显是先执行的property标签的属性和属性值然后再读的源文件的属性值所以源文件的属性值会覆盖掉这个错误的属性值 -->
 9 <property name="db.username" value="123"/>
10 </properties>
11 <!-- 自定义数据别名 -->
12 <typeAliases>
13 <!-- 自定义单个别名
14     使用:别名使用可以在映射文件中将全限定类名改为别名,且别名不区分大小写
15 -->
16 <!--  <typeAlias type="com.itheima.Po.User" alias="user"/> -->
17 <!--<推荐>批量自定义别名 
18     name:批量指定po类别名的包名
19     使用:别名即类名,且不区分大小写
20 -->
21 <package name="com.itheima.Po"/> 
22 </typeAliases>
23 
24 
25 
26     <!-- 配置mybatis的环境信息,与spring整合,该信息由spring来管理 -->
27     <environments default="development">
28         <environment id="development">
29             <!-- 配置JDBC事务控制,由mybatis进行管理 -->
30             <transactionManager type="JDBC"></transactionManager>
31             <!-- 配置数据源,采用mybatis连接池 -->
32             <dataSource type="POOLED">
33                 <property name="driver" value="${db.driver}" />
34                 <property name="url" value="${db.url}" />
35                 <property name="username" value="${db.username}" />
36                 <property name="password" value="${db.password}" />
37             </dataSource>
38         </environment>
39     </environments>
40 
41     <!-- 加载映射文件 -->
42     <mappers>
43         <mapper resource="User.xml" />
44         <!-- 指定一个路径下的所有映射文件
45         限定要求:1.接口或类需要与映射文件名称相同 2.接口或类需要和映射文件放在同一个目录下
46          -->
47         <package name="com.itheima.mapper"/>
48         <!-- <mapper resource="mapper/UserMapper.xml"/>  -->
49     </mappers>
50 </configuration>
SqlMapConfig.xml mybatis的全局配置文件

详细配置和标签属性的作用见下面代码

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE configuration
 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4 "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <configuration>
 6 <!-- 加载db.properties配置文件 -->
 7 <properties resource="db.properties">
 8 <!-- 这个明显是先执行的property标签的属性和属性值然后再读的源文件的属性值所以源文件的属性值会覆盖掉这个错误的属性值 -->
 9 <property name="db.username" value="123"/>
10 </properties>
11 <!-- 自定义数据别名 -->
12 <typeAliases>
13 <!-- 自定义单个别名
14     使用:别名使用可以在映射文件中将全限定类名改为别名,且别名不区分大小写
15 -->
16 <!--  <typeAlias type="com.itheima.Po.User" alias="user"/> -->
17 <!--<推荐>批量自定义别名 
18     name:批量指定po类别名的包名
19     使用:别名即类名,且不区分大小写
20 -->
21 <package name="com.itheima.Po"/> 
22 </typeAliases>
23 
24 
25 
26     <!-- 配置mybatis的环境信息,与spring整合,该信息由spring来管理 -->
27     <environments default="development">
28         <environment id="development">
29             <!-- 配置JDBC事务控制,由mybatis进行管理 -->
30             <transactionManager type="JDBC"></transactionManager>
31             <!-- 配置数据源,采用mybatis连接池 -->
32             <dataSource type="POOLED">
33                 <property name="driver" value="${db.driver}" />
34                 <property name="url" value="${db.url}" />
35                 <property name="username" value="${db.username}" />
36                 <property name="password" value="${db.password}" />
37             </dataSource>
38         </environment>
39     </environments>
40 
41     <!-- 加载映射文件 -->
42     <mappers>
43         <mapper resource="User.xml" />
44         <!-- 指定一个路径下的所有映射文件
45         限定要求:1.接口或类需要与映射文件名称相同 2.接口或类需要和映射文件放在同一个目录下
46          -->
47         <package name="com.itheima.mapper"/>
48         <!-- <mapper resource="mapper/UserMapper.xml"/>  -->
49     </mappers>
50 </configuration>
User.xml映射文件

 2.7在与PO类同一个包下我们添加一个测试类编写测试代码Firstmybatis.java测试代码

  1 public class FirstMyBatis {
  2     
  3     @Test
  4     public void findUserByIdTest() throws Exception{
  5         //读取配置文件
  6         //全局配置文件的路径
  7         String resource = "SqlMapConfig.xml";
  8         InputStream inputStream = Resources.getResourceAsStream(resource);
  9         
 10         //创建SqlSessionFactory
 11         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
 12         
 13         //创建SqlSession
 14         SqlSession sqlSession = sqlSessionFactory.openSession();
 15         
 16         //调用SqlSession的增删改查方法
 17         //第一个参数:表示statement的唯一标示 建议:namespace.statementId(确保唯一)
 18         //但是当名称不重复时也可以只写Id名称也不会报错
 19         //第二个参数类型要和对应映射文件中statement入参类型一致
 20         User user = sqlSession.selectOne("test.findUserById", 10);
 21         System.out.println(user);
 22         
 23         //关闭资源
 24         sqlSession.close();
 25     }    
 26     @Test
 27     public void findUserByUsernameTest() throws Exception{
 28         //读取配置文件
 29         //全局配置文件的路径
 30         String resource = "SqlMapConfig.xml";
 31         InputStream inputStream = Resources.getResourceAsStream(resource);
 32         
 33         //创建SqlSessionFactory
 34         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
 35         
 36         //创建SqlSession
 37         SqlSession sqlSession = sqlSessionFactory.openSession();
 38         
 39         //调用SqlSession的增删改查方法
 40         //第一个参数:表示statement的唯一标示 建议:namespace.statementId(确保唯一)
 41         //但是当名称不重复时也可以只写Id名称也不会报错
 42         //第二个参数类型要和对应映射文件中statement入参类型一致
 43         List<User> userList = sqlSession.selectList("test.findUserByUserName", "小明");
 44         System.out.println(userList);
 45         
 46         //关闭资源
 47         sqlSession.close();
 48     }    
 49     @Test
 50     public void insertUserTest() throws Exception{
 51         //读取配置文件
 52         //全局配置文件的路径
 53         String resource = "SqlMapConfig.xml";
 54         InputStream inputStream = Resources.getResourceAsStream(resource);
 55         
 56         //创建SqlSessionFactory
 57         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
 58         
 59         //创建SqlSession
 60         SqlSession sqlSession = sqlSessionFactory.openSession();
 61         
 62         User user =new User();
 63         user.setUsername("李四");
 64         //user.setBirthday(new Date());
 65         user.setSex("2");
 66         user.setAddress("西流河何帮");
 67         
 68         //调用SqlSession的增删改查方法
 69         //第一个参数:表示statement的唯一标示 建议:namespace.statementId(确保唯一)
 70         //但是当名称不重复时也可以只写Id名称也不会报错
 71         //第二个参数类型要和对应映射文件中statement入参类型一致
 72         int result = sqlSession.insert("test.insertUser", user);
 73         //如果不提交数据将会存在于内存中,而mybatis是自动开启事务的提交,
 74         //如果想要手动开启事务只需将sqlSessionFactory.openSession(flase)即可
 75         sqlSession.commit();
 76         System.out.println(result);
 77         
 78         //关闭资源
 79         sqlSession.close();
 80     }
 81     @Test
 82     public void insertGetKeyTest() throws Exception{
 83         //读取配置文件
 84         //全局配置文件的路径
 85         String resource = "SqlMapConfig.xml";
 86         InputStream inputStream = Resources.getResourceAsStream(resource);
 87         
 88         //创建SqlSessionFactory
 89         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
 90         
 91         //创建SqlSession
 92         SqlSession sqlSession = sqlSessionFactory.openSession();
 93         
 94         User user =new User();
 95         user.setUsername("小西西");
 96         //user.setBirthday(new Date());
 97         user.setSex("2");
 98         user.setAddress("西流河何帮");
 99         
100         //调用SqlSession的增删改查方法
101         //第一个参数:表示statement的唯一标示 建议:namespace.statementId(确保唯一)
102         //但是当名称不重复时也可以只写Id名称也不会报错
103         //第二个参数类型要和对应映射文件中statement入参类型一致
104         int result = sqlSession.insert("test.insertGetKey", user);
105         //如果不提交数据将会存在于内存中,而mybatis是自动开启事务的提交,
106         //如果想要手动开启事务只需将sqlSessionFactory.openSession(flase)即可
107         sqlSession.commit();
108         //当你在配置文件中配置了得到主键的信息那么在user中就会得到该属性值user.getId()
109         System.out.println(result+","+user.getId());
110         
111         //关闭资源
112         sqlSession.close();
113     }
114     
115     @Test
116     public void deleteUserByIdTest() throws Exception{
117         //读取配置文件
118         //全局配置文件的路径
119         String resource = "SqlMapConfig.xml";
120         InputStream inputStream = Resources.getResourceAsStream(resource);
121         
122         //创建SqlSessionFactory
123         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
124         
125         //创建SqlSession
126         SqlSession sqlSession = sqlSessionFactory.openSession();
127         
128         //调用SqlSession的增删改查方法
129         //第一个参数:表示statement的唯一标示 建议:namespace.statementId(确保唯一)
130         //但是当名称不重复时也可以只写Id名称也不会报错
131         //第二个参数类型要和对应映射文件中statement入参类型一致
132         int result = sqlSession.delete("test.deleteUserById", 29);
133         sqlSession.commit();//增加或者删除或者修改操作切记需要提交数据,因为数据内容发生变化
134         System.out.println(result);
135         
136         //关闭资源
137         sqlSession.close();
138     }    
139     @Test
140     public void updateUserTest() throws Exception{
141         //读取配置文件
142         //全局配置文件的路径
143         String resource = "SqlMapConfig.xml";
144         InputStream inputStream = Resources.getResourceAsStream(resource);
145         
146         //创建SqlSessionFactory
147         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
148         
149         //创建SqlSession
150         SqlSession sqlSession = sqlSessionFactory.openSession();
151         
152         //调用SqlSession的增删改查方法
153         //第一个参数:表示statement的唯一标示 建议:namespace.statementId(确保唯一)
154         //但是当名称不重复时也可以只写Id名称也不会报错
155         //第二个参数类型要和对应映射文件中statement入参类型一致
156         User user =new User();
157         user.setId(31);
158         user.setUsername("小希希");
159         user.setSex("1");
160         user.setBirthday(new Date());
161         user.setAddress("湖北省仙桃市西流河镇何帮村");
162         int result = sqlSession.update("test.updateUser", user);
163         sqlSession.commit();//增加或者删除或者修改操作切记需要提交数据,因为数据内容发生变化
164         System.out.println(result);
165         
166         //关闭资源
167         sqlSession.close();
168     }
169 }
测试代码

3.mybatis的两种开发方式:

3.1原始的Dao开发方式

通过编写Dao接口来开发的方式,我们还要相应实现该接口,创建一个实现类

我们通过案例来分析最快:

需求:通过id来实现查询用户、通过用户名查询、通过id删除用户

3.2编写Dao接口

1 public interface UserDao {
2     public User findUserById(int id);//根据用户ID查询用户
3     public List<User> findUserByUserName(String username);//根据用户名查询用户
4     public Integer deleteUserById(int id);//根据Id来删除用户    
5     
6 }
UserDao接口

3.3编写Dao实现类

通过代码可以看到我们实现具体方法时存在着固定限制sqlSession.selectList("test.findUserByUserName", username);第一个参数是Mapper映射文件的namespace.id名称

 1 public class UserDaoImpl implements UserDao {
 2 
 3     //创建一个SqlSession工厂,这里我们可以通过set方法注入,也可以通过构造函数注入我们这里使用后者
 4     private SqlSessionFactory  sqlSessionFactory;
 5 
 6     public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
 7         super();
 8         this.sqlSessionFactory = sqlSessionFactory;
 9     }
10 
11     @Override
12     public User findUserById(int id) {
13         SqlSession sqlSession=sqlSessionFactory.openSession();
14         //注意第一个参数需要按照特定规则来写
15         User user = sqlSession.selectOne("test.findUserById", id);
16         sqlSession.close();
17         return user;
18     }
19 
20     @Override
21     public List<User> findUserByUserName(String username) {
22         SqlSession sqlSession=sqlSessionFactory.openSession();
23         //注意第一个参数需要按照特定规则来写
24         List<User> userList = sqlSession.selectList("test.findUserByUserName", username);
25         sqlSession.close();
26         return userList;
27     }
28 
29     @Override
30     public Integer deleteUserById(int id) {
31         SqlSession sqlSession =sqlSessionFactory.openSession();
32         int result = sqlSession.delete("test.deleteUserById",id);
33         sqlSession.commit();
34         sqlSession.close();
35         return result;
36     }
37 
38 }
UserDaoImpl实现类

我们需要编写相应的映射文件信息User.xml

 1 <!DOCTYPE mapper    
 2 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"    
 3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 4 <!-- namespace:命名空间,对statement的信息进行分类管理 -->
 5 <!-- 注意:在mapper代理时,它具有特殊及重要的作用 -->
 6 <mapper namespace="test">
 7     <!-- 根据用户ID查询用户信息 -->
 8     <!-- select:表示一个MappedStatement对象 -->
 9     <!-- id:statement的唯一标示 -->
10     <!-- #{}:表示一个占位符? -->
11     <!-- #{id}:里面的id表示输入参数的参数名称,如果该参数是简单类型,那么#{}里面的参数名称可以任意 -->
12     <!-- parameterType:输入参数的java类型 -->
13     <!-- resultType:输出结果的所映射的java类型(单条结果所对应的java类型) -->
14     <select id="findUserById" parameterType="int"
15         resultType="com.itheima.Po.User">
16         SELECT * FROM USER WHERE id =#{id}
17     </select>
18     <select id="findUserByUsername" parameterType="String" resultType="com.itheima.Po.User">
19         select * from user where username like '%${value}%'
20     </select>
21 <delete id="deleteUserById" parameterType="int" >
22     DELETE FROM USER WHERE id=#{id}
23     </delete>
24 </mapper>
映射文件User.xml

还需要SqlMapConfig.xml mybatis的全局配置文件上面已经配过只需要将映射文件加载进去就行

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE configuration
 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4 "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <configuration>
 6 <!-- 加载db.properties配置文件 -->
 7 <properties resource="db.properties">
 8 <!-- 这个明显是先执行的property标签的属性和属性值然后再读的源文件的属性值所以源文件的属性值会覆盖掉这个错误的属性值 -->
 9 <property name="db.username" value="123"/>
10 </properties>
11 <!-- 自定义数据别名 -->
12 <typeAliases>
13 <!-- 自定义单个别名
14     使用:别名使用可以在映射文件中将全限定类名改为别名,且别名不区分大小写
15 -->
16 <!--  <typeAlias type="com.itheima.Po.User" alias="user"/> -->
17 <!--<推荐>批量自定义别名 
18     name:批量指定po类别名的包名
19     使用:别名即类名,且不区分大小写
20 -->
21 <package name="com.itheima.Po"/> 
22 </typeAliases>
23 
24 
25 
26     <!-- 配置mybatis的环境信息,与spring整合,该信息由spring来管理 -->
27     <environments default="development">
28         <environment id="development">
29             <!-- 配置JDBC事务控制,由mybatis进行管理 -->
30             <transactionManager type="JDBC"></transactionManager>
31             <!-- 配置数据源,采用mybatis连接池 -->
32             <dataSource type="POOLED">
33                 <property name="driver" value="${db.driver}" />
34                 <property name="url" value="${db.url}" />
35                 <property name="username" value="${db.username}" />
36                 <property name="password" value="${db.password}" />
37             </dataSource>
38         </environment>
39     </environments>
40 
41     <!-- 加载映射文件 -->
42     <mappers>
43         <mapper resource="User.xml" />
44         <!-- 指定一个路径下的所有映射文件
45         限定要求:1.接口或类需要与映射文件名称相同 2.接口或类需要和映射文件放在同一个目录下
46          -->
47         <package name="com.itheima.mapper"/>
48         <!-- <mapper resource="mapper/UserMapper.xml"/>  -->
49     </mappers>
50 </configuration>
SqlMapConfig.xml mybatis的全局配置文件

3.4测试代码

 小技巧:

 1 public class UserDaoTest {
 2 
 3     private SqlSessionFactory sqlSessionFactory;
 4     @Before
 5     public void setUp() throws IOException {
 6         //指定配置文件路径和文件名
 7         String resource="SqlMapconfig.xml";
 8         //读取配置文件得到一个字节输入流
 9         InputStream inputStream = Resources.getResourceAsStream(resource);
10         //创建SqlSessionFactory实例传入输入流
11         sqlSessionFactory =new SqlSessionFactoryBuilder().build(inputStream);
12     
13         
14     }
15     @Test
16     public void testFindUserById() {
17      UserDao userDao=new UserDaoImpl(sqlSessionFactory);
18      User user=userDao.findUserById(1);
19      System.out.println(user);
20     }
21 
22     @Test
23     public void testFindUserByUserName() {
24     UserDao userDao=new UserDaoImpl(sqlSessionFactory);
25     List<User> userList=userDao.findUserByUserName("小明");
26     System.out.println(userList);
27     }
28 
29     @Test
30     public void testDeleteUserById() {
31         UserDao userDao =new UserDaoImpl(sqlSessionFactory);
32         int result = userDao.deleteUserById(27);
33         System.out.println(result);
34     }
35 
36 }
Dao接口编程的测试代码

3.5Mapper代理的开发方式

3.6创建Mapper接口

3.7创建Mapper映射文件

3.8测试代码

4.全局配置文件的讲解

4.1概览

4.2properties

4.3settings

4.4typeAliases

猜你喜欢

转载自www.cnblogs.com/zwxbky/p/12285082.html