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.测试结果

原文地址:https://www.cnblogs.com/banzhuanlaowang/p/11455157.html