zoukankan      html  css  js  c++  java
  • 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
    View Code
    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>
    View Code
    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 }
    View Code

    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>
    View Code

    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 }
    View Code

    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 }
    View Code

     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



  • 相关阅读:
    递归和this指向
    作用域,闭包
    三种存储方式
    事件流,冒泡,捕获,事件委托
    centos添加登陆成功提示消息
    centos7下安装oracle11g R2报错
    linux下从home分区扩展到根分区
    linux下搭建mongodb副本集
    linux服务下使用nginx之后数据导出超时
    linux下搭建git服务器
  • 原文地址:https://www.cnblogs.com/zhangjinru123/p/7220094.html
Copyright © 2011-2022 走看看