zoukankan      html  css  js  c++  java
  • 2、Mybatis的编程Demo

    1 首先要有一个namespace为接口的全类名的映射文件,该例中是 UsersMapper.xml

    2 然后在mybatis的容器(就是总的配置文件)里的mappers标签内conf.xml

    引入第1步中的映射文件,这里是 UsersMapper.xml

    3 通过SqlSession对象的getUser(UsersDao.class)
    获取一个接口的代理对象

    4 调用代理对象的具体方法,也就是对应着 UsersMapper.xml中的各个select,insert
    等标签,这些标签的id属性同时必须与接口中的方法名一一对应

    1 MyBatis配置文件,conf.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
     3 "http://mybatis.org/dtd/mybatis-3-config.dtd">
     4 <configuration>
     5     <!-- 引入属性文件 -->
     6     <properties resource="db.properties"></properties>
     7     <!-- 为实体类起别名 -->
     8     <typeAliases>
     9         <!-- <typeAlias type="com.zhiyou100.wc.bean.Users" alias="u"/> --> <!-- resultType="u" -->
    10         <package name="com.zhiyou100.wc.bean"/> <!-- resultType="User" 直接写类名  package标签不可以重复  -->
    11     </typeAliases>
    12     <environments default="development">
    13         <environment id="development">
    14             <transactionManager type="JDBC" />
    15             <dataSource type="POOLED">
    16             <!-- 习惯吧数据源的信息放到一属性文件中。后缀名为.properties -->
    17                 <property name="driver" value="${jdbc.driver}" />
    18                 <property name="url"
    19                     value="${jdbc.url}" />
    20                 <property name="username" value="${jdbc.username}" />
    21                 <property name="password" value="${jdbc.password}" />
    22             </dataSource>
    23         </environment>
    24     </environments>
    25     <mappers>
    26         <mapper resource="com/zhiyou100/wc/mapper/UsersMapper.xml" />
    27     </mappers>
    28 </configuration>

    1.1属性文件db.properties    (优化)

    1 # 数据源信息
    2 jdbc.driver=com.mysql.jdbc.Driver
    3 jdbc.url=jdbc:mysql://localhost:3306/mybatis
    4 jdbc.username=root
    5 jdbc.password=root

     2.映射文件,处理sql语句 UsersMapper.xml

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     4 <!-- namespace:表示名称空间。现在的目的是区分id的. -->
     5 <mapper namespace="com.zhiyou100.wc.mapper.UsersMapper">
     6     
     7     <!-- 查询年龄在10~30之间的用户。
     8         1.查询条件不在实体类中,参数类型封装到map中。#{参数}===map的键
     9         2.封装一个实体类。 min  max.
    10     如果在xml文件中出现了特殊字符?使用转译字符。
    11     <小于号     >大于号
    12     <![CDATA[文本内容]]>在标记CDATA下,所有的标记、实体引用都被忽略,而被XML处理程序一视同仁地当做字符数据看待
    13      -->
    14     <select id="selectByAge" parameterType="map" resultType="com.zhiyou100.wc.bean.Users" >
    15         select * from user where age between #{min} and #{max}
    16         <!-- <![CDATA[select * fron user where age >=#{min} and age<=#{max}]]> -->
    17         <!-- select * fron user where age >=#{min} and age<=#{max} -->
    18     </select>
    19 
    20     <select id="selectAll" resultType="com.zhiyou100.wc.bean.Users" >
    21         select * from users
    22     </select>
    23 
    24     <!-- 根据id查询用户。id:标识该标签。
    25              parameterType:参数类型。可以写 也可以省略
    26              resultType:返回结果的类型。
    27             #{id}:类似于EL表达式。 解析id的值
    28      -->
    29     <select id="getUser" parameterType="int" resultType="com.zhiyou100.wc.bean.Users">
    30           select * from users where id=#{id}   
    31     </select>
    32     
    33     <insert id="addUser" parameterType="com.zhiyou100.wc.bean.Users" >
    34         insert into users(name,age) values(#{name},#{age})
    35     </insert>
    36     
    37     <delete id="deleteUser" parameterType="int" >
    38         delete from users where id=#{id}
    39     </delete>
    40     <update id="updateUser" parameterType="com.zhiyou100.wc.bean.Users">
    41         update users set name=#{name},age=#{age} where id=#{id}
    42     </update>
    43 </mapper>

     3.UserDao.java

     1 package com.zhiyou100.wc.dao;
     2 
     3 import java.util.List;
     4 
     5 import org.apache.ibatis.annotations.Param;
     6 
     7 import com.zhiyou100.wc.bean.Users;
     8 
     9 public interface UsersDao {
    10     /**
    11      * 根据id查询
    12      * @param id
    13      * @return
    14      */
    15     public Users getUser(int id);
    16     /**
    17      * 添加
    18      * @param user
    19      */
    20     public void addUser(Users user );
    21     /**
    22      * 删除用户
    23      * @param id
    24      */
    25     public void deleteUser(int id);
    26     /**
    27      * 修改user
    28      * @param id
    29      */
    30     public void updateUser(Users user);
    31     /**
    32      * 查询年龄在10~30之间的用户
    33      * @param min
    34      * @param max
    35      * @return
    36      * @Param:表示告诉mybatis把该方法的参数封装成map时,键名叫什么
    37      */
    38     public List<Users> selectByAge(@Param("min") int min,@Param("max") int max);
    39 }

    4. TestMybatis.java

    package com.test;
    
    import static org.junit.jupiter.api.Assertions.*;
    
    import java.io.Reader;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.jupiter.api.AfterAll;
    import org.junit.jupiter.api.BeforeAll;
    import org.junit.jupiter.api.Test;
    
    import com.zhiyou100.wc.bean.Users;
    import com.zhiyou100.wc.dao.UsersDao;
    
    class TestMybatis {
        static SqlSession session=null;
        final String str="com.zhiyou100.wc.mapper.UsersMapper";
        static UsersDao usersDao=null; 
        @BeforeAll
        static void setUpBeforeClass() throws Exception {
            //解析配置文件conf.xml
            Reader reader= Resources.getResourceAsReader("conf.xml");
            //获取SessionFactory对象
            SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(reader);
            session=sessionFactory.openSession();
            usersDao=session.getMapper(UsersDao.class);//相当于创建了一个Dao对象
        }
        
        @Test
        void testSelectAll() {
            List<Users> list= session.selectList(str+".selectAll");
            System.out.println(list);
        }
        
        @Test
        void testSelectById() {
            Users user=usersDao.getUser(1);
            System.out.println(user);
        }
        @Test
        void testSelectById2() {
            Users user=usersDao.getUser(1);
            System.out.println(user);
        }
        @Test
        void testaddUser() {
            usersDao.addUser(new Users("晨晨",18));
        }
        @Test
        void testupdateUser() {
            usersDao.updateUser(new Users(2,"天天",10));
            
        }
        @Test
        void testdeleteUser() {
            usersDao.deleteUser(4);
        }
        //测试年龄在10~30之间的人
        @Test
        void testselectByAge() {
            List<Users> list= usersDao.selectByAge(10, 30);
            System.out.println(list);
        }
        
        @AfterAll
        static void tearDownAfterClass() throws Exception {
            session.commit();//提交任务
        }
    }

    5.测试结果

  • 相关阅读:
    2019-07-08 L410 EST科技英语翻译
    L405 NYC-ATF4
    L403 Royal espionage
    L402 EST
    L401 哭声识别
    L400 How Trees Affect the Weather
    L398
    final, finally, finalize 的区别
    try {}里有一个 return 语句, 那么紧跟在这个 try 后的 finally {}里的 code会不会被执行,什么时候被执行,在 return 前还是后?
    下 面 这 条 语 句 一 共 创 建 了 多 少 个 对 象 : String s="a"+"b"+"c"+"d";
  • 原文地址:https://www.cnblogs.com/banzhuanlaowang/p/11455157.html
Copyright © 2011-2022 走看看