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