1.Mybatis
- 什么是Mybatis:
- mybatis是一个持久层框架,用java编写的
- 它封装了jdbc操作的很多细节,使开发者只需要关注sql语句本身,而无需关注注册驱动、创建连接等繁杂过程
- 它使用了ORM思想实现了结果集的封装
2. 入门Demo(假设对users表进行操作)
-
Mybatis的环境搭建
-
第一步:创建Java工程并导入mybatis-3.2.2.jar和mysql-connector-java-5.1.47.jar两个jar包到本工程下的lib包中,然后buli path
-
第二步:创建实体类和dao的接口(本工程下的src文件夹下的com.alibaba.wlq.bean包下以及com.alibaba.wlq.dao包下)
-
注意1:在创建实体类的时候如果重写了构造方法那么一定要加上无参的构造方法,否则会出错
-
注意2:在创建实体类的时候属性名要和表中的字段名相匹配
-
注意3:要生成set、get方法,也可以重写tostring方法,方便输出
package com.alibaba.wlq.bean; public class Users { private int id; private String name; private int age; private String sex; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Users(String name, int age, String sex) { super(); this.name = name; this.age = age; this.sex = sex; } public Users() { super(); } @Override public String toString() { return "Users [id=" + id + ", name=" + name + ", age=" + age + ", sex=" + sex + "]"; } public Users(int id, String name, int age, String sex) { super(); this.id = id; this.name = name; this.age = age; this.sex = sex; } }
package com.alibaba.wlq.dao; import java.util.List; import com.alibaba.wlq.bean.Users; //是个接口相当于之前jdbc时的实现类,里面写方法的 public interface UsersMapper { //查询users表中所有的记录 List<Users> selectAll(); /** * 增加用户 */ void addUser(Users user); /** * 根据id删除记录 * @param id */ void deleteById(int id); /** * 根据id修改用户信息 * @param user */ void updateById(Users user); }
-
-
第三步:创建Mybatis的主配置文件(本工程下的resources文件夹下)
-
SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 配置环境--> <environments default="development"> <!-- 配置mysql的环境 --> <environment id="development"> <!-- 配置事务的类型 --> <transactionManager type="JDBC" /> <!-- 配置数据源连接池 --> <dataSource type="POOLED"> <!-- 配置连接数据库的四个基本信息 --> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mybatis" /> <property name="username" value="root" /> <property name="password" value="123456" /> </dataSource> </environment> </environments> <!-- 指定映射配置文件的位置,映射配置文件是指每个dao独立的配置文件 --> <mappers> <mapper resource="com/alibaba/wlq/mapper/UsersMapper.xml" /> </mappers> </configuration>
-
-
第四步:创建映射配置文件(本工程下的resources文件夹下的com.alibaba.wlq.mapper包下)
- 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">
<mapper namespace="com.alibaba.wlq.dao.UsersMapper">
<!-- 这是查询users表中所有记录的sql语句,resultType属性是返回值类型,因为我们查询所有的方法肯定不止
一条数据,每一条数据就是一个对象,所以返回值类型是实体类,然后mybatis会帮我们封装进list集合中 -->
<select id="selectAll" resultType="com.alibaba.wlq.bean.Users">
select * from users
</select>
<insert id="addUser" parameterType="com.alibaba.wlq.bean.Users">
insert into users(name,age,sex) values(#{name},#{age},#{sex})
</insert>
<delete id="deleteById" parameterType="int">
delete from users where id = #{id}
</delete>
<update id="updateById" parameterType="com.alibaba.wlq.bean.Users">
update users set name = #{name},age = #{age},sex = #{sex} where id = #{id}
</update>
</mapper>
-
测试
import static org.junit.jupiter.api.Assertions.*; import java.io.Reader; import java.util.List; 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.alibaba.wlq.bean.Users; import com.alibaba.wlq.dao.UsersMapper; class test { static SqlSession session = null; static UsersMapper usersmapper; @BeforeAll static void setUpBeforeClass() throws Exception { //读取配置文件 Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml"); //创建SqlSessionFactory工厂 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader); //使用工厂生产SqlSession对象 session = factory.openSession(); //使用SqlSession创建Dao接口的代理对象 usersmapper = session.getMapper(UsersMapper.class); } @AfterAll static void tearDownAfterClass() throws Exception { //向数据库提交 session.commit(); } @Test void test1() { //使用代理对象执行方法 //查询所有记录并输出 List<Users> list = usersmapper.selectAll(); System.out.println(list); } @Test void test2() { //使用代理对象执行方法 //增加用户 usersmapper.addUser(new Users("xxx",18,"男")); } @Test void test3() { /** * 删除id为10的用户 */ usersmapper.deleteById(10); } @Test void test4() { /** * 根据用户id修改用户信息 */ usersmapper.updateById(new Users(5,"杨幂",18,"女")); } }