Mybatis
一、介绍
Mybatis是支持普通SQL查询,存储过程和高级映射的优秀持久层
框架。Mybatis消除了几乎所有的jdbc代码和参数的手工设置以及对结果集的检索封装。Mybatis可以使用简单的xml或注解用于配置和原始映射。将接口的pojo(plain old java objects,实体类,普通的java对象)映射成数据库中的记录。
持久层:把Java对象保存到数据库的过程就是持久层 dao层mybatis半自动化框架,必须写SQL语句
JDBC->dbutils->MyBatis->Hibernate
二、mybatis快速入门
编写一个基于Mybatis的测试例子(增删改查):
- 步骤:
-
1.导入 mybatis.jar包
【mybatis】 mybatis-3.1.1.jar 【MYSQL 驱动包】 mysql-connector-java-5.1.7-bin.jar
-
2.添加mybatis的配置文件mybatis-conf.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"> <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="root" /> </dataSource> </environment> </environments> </configuration>
-
3.定义表所对应的实体类
public class User { private int id; private String name; private int age; }
-
4.定义操作user表的sql映射文件UserMapper.xml
<mapper namespace="dong"> <!-- resultType:实体类的全局路径 --> <select id="getUser" parameterType="int" resultType="com.hong.entity.User"> select * from users where id=#{id} </select> <insert id="insertUser" > insert into users(name,age) values(#{name},#{age}) </insert> <delete id="deleteUser"> delete from users where id=#{id} </delete> <update id="updateUser"> update users set name=#{name } where id=#{id} </update>
-
5.在mybatis-conf.xml文件中注册userMapper.xml
<mappers> <!--映射文件的路径--> <mapper resource="mapper/UserMapper"></mapper> </mappers>
-
6.编写测试代码:执行定义的select语句
//1. 读取配置文件 Reader reader = Resources.getResourceAsReader("mybatis-config"); //2. 构建Session工厂 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); //3. 创建能执行映射文件中的sql的sqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); //4.执行sql //查询 /*User user = sqlSession.selectOne("dong.getUser", 1); System.out.println(user);*/ //新增 /*int insert = sqlSession.insert("dong.insertUser", new User(4, "丁丁", 18)); //事务提交 sqlSession.commit(); System.out.println("a!!!!!!!!!!");*/ //删除 /*int delete = sqlSession.delete("dong.deleteUser", 4); sqlSession.commit(); System.out.println("a~~~~~~~~~~`");*/ //修改 int jhon = sqlSession.update("dong.updateUser", new User(2, "Jhon", 11)); sqlSession.commit(); System.out.println("a~~~~~~~~~~~~~~``");
-
三、操作user表的crud
3.1 XML的实现
- 定义SQL映射xml文件:
<insert id="insertUser" parameterType="com.hong.entity.User">
insert into user(name, age) values(#{name}, #{age});
</insert>
<delete id="deleteUser" parameterType="int">
delete from user where id=#{id}
</delete>
<update id="updateUser" parameterType="com.hong.entity.User">
update user set name=#{name},age=#{age} where id=#{id}
</update>
<select id="getOneUser" parameterType="int" resultType="com.hong.entity.User">
select * from user where id=#{id}
</select>
<select id="getAllUser" resultType="com.hong.entity.User">
select * from user
</select>
- 在mybatis-config.xml中注册这个映射文件
<mappers>
<mapper resource="com/hong/mybatis_test/test1/UserMapper.xml"/>
</mappers>
四、实际开发的模式
接口结合映射文件一起用
1.创建一个接口
public interface UserDao {
/**
* 查询所有的用户信息
*/
public List<User> getAllUser();
/**
* 根据id查询用户信息
*/
//@Param:表示把该参数的名称作为映射文件的参数名
public Users getByNameAndAge(int id);
}
接口中写出要写的方法
2. 创建映射文件
<?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必须和接口的全路径匹配-->
<mapper namespace="com.hong.dao.UserDao">
<!--
id 名称必须和接口中的方法名一致
查询语句中的resultType必须写
-->
<select id="getAllUser" resultType="com.hong.entity.User">
select * from users
</select>
<select id="getByNameAndAge" resultType="com.hong.entity.User">
select * from users where id=#{id}
</select>
</mapper>