zoukankan      html  css  js  c++  java
  • Mybatis框架(2)---mapper代理方法

    mapper代理方法

    在我们在写MVC设计的时候,都会写dao层和daoimp实现层,但假如我们使用mapper代理的方法,我们就可以不用先daoimp实现类

    当然这得需要遵守一些相应的规则:

    (1)Usermapper.java接口必须和Usermapper.xml名称相同,且要在同一目录下:

    (2)mapper.xmlnamespace等于mapper接口的地址

    (3)Usermapper.java接口中国的方法名和Usermapper.xmlstatementid一致

    <!-- 7综合查询 -->
          <select id="findUserCount" parameterType="com.study.model.User" resultType="int">
              select count(*) from user where user.sex=#{userCustomer.sex} and user.username like '%${userCustomer.username}%'
          </select> 

    如果你在Usermapper.xml配置上面这些属性那么你所写的接口就必须:

    1     /*findUserCount接口的名字必须和id属性一致
    2      * 传入的参数必须和parameterType是一致,前面是user这里也是user
    3      * 返回类型resultType是int类型,那么这里也必须是int类型
    4      */
    5     public int findUserCount(User user);

    (4)SqlMapConfig.xml中加载mapper.xml

    1 <mappers>
    2     <!-- 这里是之前加载所写的 -->
    3     <!--     <mapper resource="sqlmap/User.xml" /> -->
    4         <!-- 通过mapper接口 加载单个映射文件 必须遵循一些规范: 需要将mapper接口和mapper.xml映射文件 文件名必须一致 并且在同一个目录下 -->
    5         <mapper class="com.study.mapper.UserMapper" /> 
    6     
    7     </mappers>

    (5)通过mapper代理方法进行增删改查

    a.编写user对象

    public class User {
        private int id;
        private String username;// 用户姓名
        private String sex;// 性别
        private Date birthday;// 生日
        private String address;// 地址
    /*
     *提供set和get方法和tostring方法
     *
     */
    }

    b.配置SqlMapConfig.xml

    <!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <properties resource="db.properties"></properties>
        <!-- 定义 别名 -->
        <typeAliases>
            <!--
                单个别名的定义
                alias:别名,type:别名映射的类型  -->
                <!-- <typeAlias type="com.study.model.User" alias="user"/> -->
                <!-- 批量别名定义
                指定包路径,自动扫描包下边的pojo,定义别名,别名默认为类名(首字母小写或大写)
             -->
            <package name="com.study.model"/>
        </typeAliases>
        <!-- 和spring整合后 environments配置将废除-->
        <environments default="development">
            <environment id="development">
            <!-- 使用jdbc事务管理-->
                <transactionManager type="JDBC" />
            <!-- 数据库连接池-->
                <dataSource type="POOLED">
                    <property name="driver" value="${jdbc.driver}"/>
                    <property name="url" value="${jdbc.url}"/>
                    <property name="username" value="${jdbc.username}"/>
                    <property name="password" value="${jdbc.password}"/>
                </dataSource>
            </environment>
        </environments>
        <!--加载mapper映射
        如果将和spring整合后,可以使用整合包中提供的mapper扫描器,此处的mappers不用配置了。
         -->
        <mappers>
        <mapper class="com.study.mapper.UserMapper" />    
    </mappers>
    
     </configuration>

    在这里有两个新的知识点:

      1: <properties resource="db.properties"></properties>

      之前在连接数据库填写配置文件直接把属性(连接数据库用户名,密码等)写在里面,而这里是写在外面的db.properties中,这样更好的体现代码的灵活性

     2:<typeAliases>标签,之前我们配置mapper.xml文件中的parameterType和resultType的属性如果是对象一定要写类的全名称,而通过<typeAliases>标签的配置我们只需要写类的名字就好了

    c.配置db.properties

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/study
    jdbc.username=root
    jdbc.password=root

     也就是这样的

    d.配置UserMapper.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">
    <!-- namespace的属性对应所在的UserMapper接口全名称 -->
    <mapper namespace="com.study.mapper.UserMapper">
       <!-- 发现这里的resultType属性我们可以不用写类的全名称com.study.model.User,因为在-->
       <!--SqlMapConfig.xml属性中我们配置了<typeAliases>标签  --> 
        <!-- 根据id查询用户信息 -->
        <select id="findUserById" parameterType="int" resultType="user">
            SELECT * FROM USER WHERE id= #{id}
        </select>
       
          <!-- 根据用户名称查询用户信息,可能返回多条-->
        <select id="findUserByName" parameterType="java.lang.String" resultType="user">
            select * from user where username like '%${value}%'
        </select>
        
         <!-- 添加用户-->
        <insert id="insertUser" parameterType="user">
            INSERT INTO USER(username,birthday,sex,address) VALUES(#{username},#{birthday},#{sex},#{address})
        </insert>
       
    </mapper>

    f.配置UserMapper.java对象 

    public interface UserMapper {
        //根据用户id查询用户信息
        public User findUserById(int id) throws Exception;
        //根据用户名称  查询用户信息
        public List<User> findUserByName(String username) throws Exception;//插入用户
        public void insertUser(User user)throws Exception;
      
    //删除用户 public void deleteUser(int id) throws Exception; //修改用户 public void updateUser(User user) throws Exception; }

    e.编写UserMapperTest类进行 增删改查

     1 import java.io.IOException;
     2 import java.io.InputStream;
     3 import java.util.ArrayList;
     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 com.study.mapper.UserMapper;
    14 import com.study.model.User;
    15 
    16 
    17 public class UserMapperTest {
    18     // 会话工厂
    19     private SqlSessionFactory sqlSessionFactory;
    20     // 创建工厂
    21     @Before
    22     public void init() throws IOException {
    23         String resource = "SqlMapConfig.xml";
    24         InputStream inputStream = Resources.getResourceAsStream(resource);
    25         sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    26     }
    27     //通过用户id查找对象
    28     @Test
    29     public void testFindUserById() throws Exception {
    30         SqlSession sqlSession = sqlSessionFactory.openSession();
    31         // 创建代理对象,这里就相当于有事先类了
    32         UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    33         User user = userMapper.findUserById(1);
    34         System.out.println(user);
    35     }
    36  
    37     //根据用户相信模糊查询
    38   @Test
    39     public void testFindUserByUsername() throws Exception {
    40         SqlSession sqlSession = sqlSessionFactory.openSession();
    41         UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    42         List<User> list = userMapper.findUserByName("小明");
    43         System.out.println(list);
    44     }
    45   
    46    //添加用户
    47     @Test
    48     public void testInsertUser() throws Exception {
    49         SqlSession sqlSession = sqlSessionFactory.openSession();
    50         UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    51         User user = new User();
    52         user.setUsername("小小洪");
    53         //我这里只添加了用户名,其它信息没有添加,默认为null
    54         //Preparing: INSERT INTO USER(username,birthday,sex,address) VALUES(?,?,?,?)
    55         //Parameters: 小小洪(String), null, null, null
    56         userMapper.insertUser(user);
    57         sqlSession.commit();
    58         sqlSession.close();
    59     }
    60 }
    61   /*
    62    *删除和修改我这里先不写了,大家理解就好
    63    */

    本文就讲到这,谢谢大家,欢迎大家指点谢谢!



  • 相关阅读:
    PVE6.3去订阅
    帝国CMS灵动标签当天更新的日期显示红色其他颜色变成灰色
    灵动标签实现循环子栏目数据——实现 循环子栏目数据标签 (listsonclass)的效果
    帝国cms灵动标签实现循环子栏目数据
    帝国cms常用灵动标签
    51nod1847 奇怪的数学题
    CTS2019 氪金手游
    CTS2019 重复
    UR #5 怎样跑得更快
    AGC034 F
  • 原文地址:https://www.cnblogs.com/qdhxhz/p/6493007.html
Copyright © 2011-2022 走看看