MyBatis代理开发(2)

一、开发步骤和程序代码

1、程序员需要编写user.xml映射文件,程序员编写mapper接口需要遵循一些开发规范,mybatis可以自动生成mapper接口实现类代理对象。

2、创建数据库配置文件db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
jdbc.username=root
jdbc.password=123

3、创建mybatis配置文件SqlMapConfig.xml

 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     <!-- 加载属性文件 -->
 7     <properties resource="db.properties"></properties>
 8
 9     <!-- 全局配置参数,需要时再设置 -->
10     <!-- <settings></settings> -->
11
12     <!-- 别名定义 -->
13     <typeAliases>
14         <!-- 针对单个别名定义 type:类型的路径 alias:别名 -->
15         <!-- <typeAlias type="com.zhang.domain.User" alias="user"/> -->
16         <!-- 批量别名定义  指定包名,mybatis自动扫描包中的po类,自动定义别名,别名就是类名(首字母大写或小写都可以)-->
17         <package name="com.zhang.domain"/>
18     </typeAliases>
19
20     <environments default="development">
21         <environment id="development">
22         <!-- 使用jdbc事务管理,事务控制由mybatis-->
23             <transactionManager type="JDBC" />
24         <!-- 数据库连接池,由mybatis管理-->
25             <dataSource type="POOLED">
26                 <property name="driver" value="${jdbc.driver}" />
27                 <property name="url" value="${jdbc.url}" />
28                 <property name="username" value="${jdbc.username}" />
29                 <property name="password" value="${jdbc.password}" />
30             </dataSource>
31         </environment>
32     </environments>
33
34     <mappers>
35         <mapper resource="sqlmap/User.xml"/>
36
37         <!-- 通过mapper接口加载单个 映射文件
38         遵循一些规范:需要将mapper接口类名和User.xml映射文件名称保持一致,且在一个目录 中
39         上边规范的前提是:使用的是mapper代理方法
40          -->
41         <!-- <mapper class="com.zhang.dao.UserDao"/> -->
42
43         <!-- 批量加载mapper
44         指定mapper接口的包名,mybatis自动扫描包下边所有mapper接口进行加载
45         遵循一些规范:需要将mapper接口类名和User.xml映射文件名称保持一致,且在一个目录 中
46         上边规范的前提是:使用的是mapper代理方法
47          -->
48     <!--     <package name="com.zhang.dao"/> -->
49     </mappers>
50 </configuration>

4、创建接口类UserDao.java

 1 package com.zhang.dao;
 2
 3 import java.util.List;
 4 import com.zhang.domain.User;
 5
 6 public interface UserDao {
 7
 8     //根据id查询用户信息,使用resultMap输出
 9     public User findUserByIdResultMap(int id) throws Exception;
10
11     //根据id查询用户信息
12     public User findUserById(int id) throws Exception;
13
14     //根据用户名列查询用户列表
15     public List<User> findUserByName(String name) throws Exception;
16
17     //添加用户信息
18     public void insertUser(User user) throws Exception;
19
20     //删除用户信息
21     public void deleteUser(int id) throws Exception;
22
23 }

5、创建user.xml映射文件

 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     <!-- 加载属性文件 -->
 7     <properties resource="db.properties"></properties>
 8
 9     <!-- 全局配置参数,需要时再设置 -->
10     <!-- <settings></settings> -->
11
12     <!-- 别名定义 -->
13     <typeAliases>
14         <!-- 针对单个别名定义 type:类型的路径 alias:别名 -->
15         <!-- <typeAlias type="com.zhang.domain.User" alias="user"/> -->
16         <!-- 批量别名定义  指定包名,mybatis自动扫描包中的po类,自动定义别名,别名就是类名(首字母大写或小写都可以)-->
17         <package name="com.zhang.domain"/>
18     </typeAliases>
19
20     <environments default="development">
21         <environment id="development">
22         <!-- 使用jdbc事务管理,事务控制由mybatis-->
23             <transactionManager type="JDBC" />
24         <!-- 数据库连接池,由mybatis管理-->
25             <dataSource type="POOLED">
26                 <property name="driver" value="${jdbc.driver}" />
27                 <property name="url" value="${jdbc.url}" />
28                 <property name="username" value="${jdbc.username}" />
29                 <property name="password" value="${jdbc.password}" />
30             </dataSource>
31         </environment>
32     </environments>
33
34     <mappers>
35         <mapper resource="sqlmap/User.xml"/>
36
37         <!-- 通过mapper接口加载单个 映射文件
38         遵循一些规范:需要将mapper接口类名和User.xml映射文件名称保持一致,且在一个目录 中
39         上边规范的前提是:使用的是mapper代理方法
40          -->
41         <!-- <mapper class="com.zhang.dao.UserDao"/> -->
42
43         <!-- 批量加载mapper
44         指定mapper接口的包名,mybatis自动扫描包下边所有mapper接口进行加载
45         遵循一些规范:需要将mapper接口类名和User.xml映射文件名称保持一致,且在一个目录 中
46         上边规范的前提是:使用的是mapper代理方法
47          -->
48     <!--     <package name="com.zhang.dao"/> -->
49     </mappers>
50 </configuration>

6、创建实体类User.java文件

 1 package com.zhang.domain;
 2
 3 import java.util.Date;
 4 public class User {
 5
 6     //属性名和数据库表的字段对应
 7     private int id;
 8     private String username;// 用户姓名
 9     private String sex;// 性别
10     private Date birthday;// 生日
11     private String address;// 地址
12     public int getId() {
13         return id;
14     }
15     public void setId(int id) {
16         this.id = id;
17     }
18     public String getUsername() {
19         return username;
20     }
21     public void setUsername(String username) {
22         this.username = username;
23     }
24     public String getSex() {
25         return sex;
26     }
27     public void setSex(String sex) {
28         this.sex = sex;
29     }
30     public Date getBirthday() {
31         return birthday;
32     }
33     public void setBirthday(Date birthday) {
34         this.birthday = birthday;
35     }
36     public String getAddress() {
37         return address;
38     }
39     public void setAddress(String address) {
40         this.address = address;
41     }
42     @Override
43     public String toString() {
44         return "User [id=" + id + ", username=" + username + ", sex=" + sex
45                 + ", birthday=" + birthday + ", address=" + address + "]";
46     }
47
48
49 }

7、测试,创建测试类TestMy.java

 1 package com.zhang.test;
 2
 3 import java.io.InputStream;
 4 import java.util.Date;
 5 import java.util.List;
 6
 7 import org.apache.ibatis.io.Resources;
 8 import org.apache.ibatis.session.SqlSession;
 9 import org.apache.ibatis.session.SqlSessionFactory;
10 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
11 import org.junit.Before;
12 import org.junit.Test;
13
14 import com.zhang.dao.UserDao;
15 import com.zhang.domain.User;
16
17 public class TestMy {
18     private SqlSessionFactory sqlSessionFactory;
19
20     // 此方法是在执行testFindUserById之前执行
21     @Before
22     public void setUp() throws Exception {
23         // 创建sqlSessionFactory
24         // mybatis配置文件
25         String resource = "SqlMapConfig.xml";
26         // 得到配置文件流
27         InputStream inputStream = Resources.getResourceAsStream(resource);
28         // 创建会话工厂,传入mybatis的配置文件信息
29         sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
30     }
31
32     @Test
33     public void testFindUserById() throws Exception {
34         SqlSession sqlSession = sqlSessionFactory.openSession();
35         //创建UserMapper对象,mybatis自动生成mapper代理对象
36         UserDao userDao = sqlSession.getMapper(UserDao.class);
37         //调用userMapper的方法
38         User user = userDao.findUserById(1);
39         System.out.println(user);
40     }
41
42     @Test
43     public void testFindUserByName() throws Exception {
44         SqlSession sqlSession = sqlSessionFactory.openSession();
45         //创建UserMapper对象,mybatis自动生成mapper代理对象
46         UserDao userDao = sqlSession.getMapper(UserDao.class);
47         //调用userMapper的方法
48         List<User> list = userDao.findUserByName("小明");
49         sqlSession.close();
50         System.out.println(list);
51     }
52
53     @Test
54     public void insertUser() throws Exception {
55         SqlSession sqlSession = sqlSessionFactory.openSession();
56         //创建UserMapper对象,mybatis自动生成mapper代理对象
57         UserDao userDao = sqlSession.getMapper(UserDao.class);
58         User user=new User();
59         user.setAddress("深圳");
60         user.setBirthday(new Date());
61         user.setSex("女");
62         user.setUsername("zhangjinru");
63         //调用userMapper的方法
64         userDao.insertUser(user);
65         //提交事务
66         sqlSession.commit();
67         sqlSession.close();
68     }
69
70     @Test
71     public void deleteUser() throws Exception {
72         SqlSession sqlSession = sqlSessionFactory.openSession();
73         //创建UserMapper对象,mybatis自动生成mapper代理对象
74         UserDao userDao = sqlSession.getMapper(UserDao.class);
75         //调用userMapper的方法
76         userDao.deleteUser(24);
77         // 提交事务
78         sqlSession.commit();
79         sqlSession.close();
80     }
81
82     @Test
83     public void testFindUserByIdResultMap() throws Exception {
84         SqlSession sqlSession = sqlSessionFactory.openSession();
85         //创建UserDao对象,mybatis自动生成mapper代理对象
86         UserDao userDao = sqlSession.getMapper(UserDao.class);
87         //调用userDao的方法
88         User user = userDao.findUserByIdResultMap(1);
89         System.out.println(user);
90     }
91
92
93 }

8、整个工程目录结构

二、一些问题总结

1、在user.xml中namespace等于UserDao接口地址

2、UserDao.java接口中的方法名和user.xml中statement的id一致

3、UserDao.java接口中的方法输入参数类型和user.xml中statement的parameterType指定的类型一致。UserDao.java接口中的方法返回值类型和user.xml中statement的resultType指定的类型一致

4、代理对象内部调用selectOne或selectList ,如果mapper方法返回单个pojo对象(非集合对象),代理对象内部通过selectOne查询数据库。如果mapper方法返回集合对象,代理对象内部通过selectList查询数据库。

5、typeAliases(别名)

在user.xml中,定义很多的statement,statement需要parameterType指定输入参数的类型、需要resultType指定输出结果的映射类型。

如果在指定类型时输入类型全路径,不方便进行开发,可以针parameterType或resultType指定的类型定义一些别名,在user.xml中通过别名定义,方便开发。

6、通过resource加载单个映射文件

7、通过mapper接口加载单个mapper,按照上边的规范,将User.java和User.xml放在一个目录 ,且同名。

资源下载地址:http://download.csdn.net/detail/u013865056/9907003

时间: 2024-10-20 19:43:40

MyBatis代理开发(2)的相关文章

mybatis入门基础(二)----原始dao的开发和mapper代理开发

阅读目录 一:原始dao开发方法 二:mapper代理方法(只需要mapper接口,相当于dao接口) 承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先苦后甜嘛! 回到顶部 一:原始dao开发方法 概要:1.在上篇中搭建好的框价中编写dao接口和dao实现类 2.向dao接口实现类中注入SqlSessionFactory,在方法体内通过SqlSe

Spring+SpringMVC+MyBatis深入学习及搭建(二)——MyBatis原始Dao开发和mapper代理开发(转发同上)

前面有写到Spring+SpringMVC+MyBatis深入学习及搭建(一)--MyBatis的基础知识.MybatisFirst中存在大量重复的代码.这次简化下代码: 原地址:http://www.cnblogs.com/shanheyongmu/p/7121016.html 使用MyBatis开发Dao,通常有两种方法,即原始Dao开发方法和Mapper接口开发方法. 1.SqlSession使用范围 1.1 SqlsessionFactoryBuilder 通过SqlSessionFac

Mybatis框架三:DAO层开发、Mapper动态代理开发

这里是最基本的搭建:http://www.cnblogs.com/xuyiqing/p/8600888.html 接下来做到了简单的增删改查:http://www.cnblogs.com/xuyiqing/p/8601506.html 但是发现代码重复过多等问题 接下来整合并实现DAO开发: 一:原始DAO开发: package dao; import pojo.User; public interface UserDao { public User selectUserById(Integer

Mybatis入门---dao开发和mapper代理开发

在说mabatis之前,先说说单独使用jdbc编程的缺陷. jdbc编程的大概流程大家都很清楚,基本分为以下几步: 加载数据驱动 创建并获取数据库连接 创建jdbc statement对象 设置sql语句,并设置sql语句中的参数 通过statement执行sql并获取结果 对执行的结果进行解析处理 释放资源 1 public static void main(String[] args) { 2 Connection connection = null; 3 PreparedStatement

【转】Mybatis学习---MyBatis知识、原始Dao开发和mapper代理开发

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

mybatis学习 九 代理开发

1.作用: 实现创建一个接口后把mapper.xml由mybatis生成接口的实现类,通过调用接口对象就可以获取 mapper.xml 中编写的 sql. 2.实现步骤: 2.1 创建一个接口 (1) 为了xxxMapper.xml文件与xxxMapper.java文件进行绑定,接口包名和接口名必须 xxxMapper.xml  中<mapper>标签namespace属性值相同,还要求xxxMapper.xml 与xxxMapper.java文件要在同一个包下 (2)接口中方法名和 xxxM

mybatis基础_动态代理开发

1.使用原始dao开发需要编写mapper的接口和实现类 1.编写接口 public interface UserDao { User getUserById(int userId); } 2.编写实现类 public class UserDaoImpl implements UserDao { private SqlSessionFactory sqlSessionFactory; public UserDaoImpl(SqlSessionFactory sqlSessionFactory)

MyBatis开发Dao的原始Dao开发和Mapper动态代理开发

摘自:https://www.cnblogs.com/yichunguo/p/11990961.html 目录 咳咳...初学者看文字(Mapper接口开发四个规范)属实有点费劲,博主我就废了点劲做了如下图,方便理解: 原始Dao开发方式 1. 编写映射文件 3.编写Dao实现类 4.编写Dao测试 Mapper动态代理方式 1.定义Mapper.xml(映射文件) 2.编写UserMapper.xml配置文件内容: 3.编写UserMapper(接口文件) 4.加载UserMapper.xml

MyBatis - Mapper动态代理开发

采用Mapper动态代理方法只需要编写相应的Mapper接口(相当于Dao接口),那么Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同Dao接口实现类方法. - Mapper接口开发需要遵循以下规范: ① Mapper.xml文件中的namespace与mapper接口的全类名相同. ② Mapper接口方法名和Mapper.xml中定义的statement的id相同. ③ Mapper接口方法的输入参数类型和mapper.xml中定义的statement的paramet