Mybatis 框架
MyBatis 是一款优秀的==持久层框架==,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射实体类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
持久层: 与数据库交互的一层.[用于操作数据表记录的]
框架: 别人写好的一个半成品。我们只需要加入自己的配置以及代码。
ORM框架: Object Relative Mapping(对象关系映射)。 表---实体类 一条记录--实体类的对象
表的字段---java实体类的属性
mybatis 的使用
为什么要用 mybatis
mybatis 下面都帮你完成
如何使用 mybatis
- 创建一个普通的 maven 工程
- 引入依赖
<!-- mysql 依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<!-- Mybatis 依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.14</version>
</dependency>
<!-- junit依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<!-- lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.28</version>
</dependency>
- 编写 mybatis.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">
<!--name是固定的 value根据需要配置为自己的内容-->
<property name="driver" value="com.mysql.cj.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=Asia/Shanghai" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
</configuration>
- 配置映射文件(里面写自己的 sql 语句)
<?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="aaa">
<!--select:用于编写查询的sql语句
id:唯一标签 现在可以随便起名
resultType:结果类型 sql执行完毕后返回对应的java实体类的类型 把查询的结果自动封装到该实体类的属性上
-->
<select id="getById" resultType="com.ykq.entity.User">
select * from user where id=#{id}
</select>
</mapper>
- 把映射文件放入配置文件中
- 测试
@Test
public void test01() throws Exception{
//1. 读取mybatis的配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
//2. 获取SqlSessionFactory对象---创建sqlSession的对象
SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);
//3. 获取SqlSession对象---表示java与数据库的一次连接
SqlSession sqlSession=sessionFactory.openSession();
//4. 执行sql语句
//String statement, 执行映射文件中的哪个标签
// Object parameter 需要的参数值
User user= sqlSession.selectOne("aaa.getById",1);
System.out.println(user);
}
mybatis完成crud操作
<?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="aaa">
<!--select:用于编写查询的sql语句
id:唯一标签 现在可以随便起名
resultType:结果类型 sql执行完毕后返回对应的java实体类的类型 把查询的结果自动封装到该实体类的属性上
-->
<select id="getById" resultType="com.ykq.entity.User">
select * from user where id=#{a}
</select>
<!--删除-->
<delete id="deleteById">
delete from user where id=#{id}
</delete>
<!--添加 #{名称}必须和实体类属性名一致-->
<insert id="addUser">
insert into user(name,age,head,email) values(#{name},#{age},#{head},#{email})
</insert>
<!--修改: #{名称} 必须和实体类一致-->
<update id="update">
update user set name=#{name},age=#{age},email=#{email},head=#{head} where id=#{id}
</update>
</mapper>
@Test
public void testDelete() throws Exception{
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession=sqlSessionFactory.openSession();
int row = sqlSession.delete("aaa.deleteById", 1);
System.out.println("影响了:"+row);
//增删改操作时必须提交。
sqlSession.commit();
}
@Test
public void testAdd() throws Exception{
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession=sqlSessionFactory.openSession();
User user=new User(null,"关文琪",18,"150@qq.com","2.jpg");
sqlSession.insert("aaa.addUser",user);
// //增删改操作时必须提交。
sqlSession.commit();
}
@Test
public void testUpdate() throws Exception{
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession=sqlSessionFactory.openSession();
User user=new User(45,"岳科旭",18,"150@qq.com","2.jpg");
sqlSession.update("aaa.update",user);
// //增删改操作时必须提交。
sqlSession.commit();
}
mybatis 企业模式开发
上面我们操作数据库表记录都是使用的SqlSession类中的方法,而实际开发中我们习惯自己写方法,调用自己的方法传递相应的参数。但是这些方法没有方法体{}. 而方法的实现交于mybatis框架完成。 [按照你写的sql完成相应的实现]
- 创建一个接口
public interface UserDao {
//根据id查询用户信息
public User queryById(int id);
}
- 映射文件
<?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.aaa.dao.UserDao">
<!--
id:必须和Dao接口中的方法名一致
resultType
-->
<select id="queryById" resultType="com.aaa.entity.User">
select * from user where id=#{id}
</select>
</mapper>
- 测试