文章中用到的 sql和代码请参阅
gitee.com/ganzuoganwe…
MyBatis 基本认识
MyBatis 是一款优秀的 ORM(Object Relational Mapping) 对象关系映射框架。
ORM
什么是ORM, 我这边画了一个图加深下对ORM的理解
MyBatis特点
- 支持自定义 SQL、存储过程以及高级映射
- 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作
- 通过简单的 XML 或注解来配置和 JAVA 对象与数据库中共数据的对应关系。
MyBatis 解决了JDBC操作数据库的缺点:
- 重复代码
- sql 冗余在java 代码中
- sql 查询结果映射到 对象复杂
- 连接数据库的资源释放关闭等操作
需要了解JDBC操作数据库的同学参考:JDBC连接MySql
MyBatis 快速使用
在resource目录下面,配置jdbc 链接
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&rewriteBatchedStatements=true
jdbc.username=root
jdbc.password=root
MyBatis 中的依赖可以到 mvnrepository.com/ 中进行搜索
增加依赖
<!-- mybatis依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.4</version>
</dependency>
<!-- mysql驱动,需要增加 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency>
mybatis-config.xml
MyBatis 的全局配置文件命名默认为: mybatis-config.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>
<!-- 配置文件, jdbc的连接等信息 -->
<properties resource="application.properties"/>
<!-- 配置别名, 后面对于do 的查询不需要写全路径名,只需要写对应的DO 名称就好了 -->
<typeAliases>
<package name="com.example.mybatis.model.entity"/>
</typeAliases>
<!-- 环境配置 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!-- mapper 映射处理, 这里的配置方式有三种,参考官网。 这里使用的是最常用的包映射 -->
<mappers>
<package name="org.mybatis.builder"/>
</mappers>
</configuration>
mapper.xml
下面的 mapper.xml 文件实现了最基本的增删改查。具体标签的使用这里不做叙述,请参考光官方文档: mybatis mappers映射文件
<?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.example.mybatis.mapper.BlogMapper">
<!-- 映射关系 -->
<resultMap id="blogResultMap" type="blogDO">
<id column="bid" property="bid" jdbcType="INTEGER"/>
<result column="name" property="name" jdbcType="VARCHAR" typeHandler="com.example.mybatis.config.MyStringTypeHandler"/>
<result column="author_id" property="authorId" jdbcType="INTEGER"/>
<result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
</resultMap>
<!-- sql 片段使用,下面的语句中可以引用 -->
<sql id="BASE_SQL_COLUMN">
bid
, name, author_id from blog
</sql>
<!-- =======================================================1 基本增删更改 ====================================================== -->
<!-- insert -->
<insert id="insertBlog" parameterType="blogDO">
insert into blog (bid, name, author_id)
values (#{bid, jdbcType = INTEGER},
#{name,jdbcType=VARCHAR,typeHandler=com.example.mybatis.config.MyStringTypeHandler},
#{authorId,jdbcType=INTEGER})
</insert>
<!-- delete -->
<delete id="deleteByBid" parameterType="int">
delete
from blog
where bid = #{bid}
</delete>
<!-- update -->
<update id="updateByBid" parameterType="blogDO">
update blog
set name = #{name},
author_id = #{authorId}
where bid = #{bid}
</update>
<!-- select -->
<select id="selectBlogById" resultMap="blogResultMap" statementType="PREPARED">
select
<include refid="BASE_SQL_COLUMN"/>
where bid = #{bid}
</select>
</mapper>
mapper接口
public interface BlogMapper {
int insertBlog(BlogDO blogDO);
int deleteByBid(Integer bid);
int updateByBid(BlogDO blogDO);
BlogDO selectBlogById(Integer bid);
}
测试
private final Logger logger = LoggerFactory.getLogger(this.getClass());
SqlSessionFactory sqlSessionFactory;
/**
* 1获取SqlSessionFactory 对象用于创建 SqlSession 会话,连接数据库。
* 2 具体原理这里不做介绍,后续分析MyBatis体系结构的时候再做介绍。
* @throws IOException 异常
*/
@Before
public void initSqlSessionFactory() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void testInsert() {
SqlSession sqlSession = sqlSessionFactory.openSession();
BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
BlogDO blogDO = new BlogDO();
blogDO.setBid(3);
blogDO.setName("测试类型转换");
blogDO.setAuthorId(1009);
int i = mapper.insertBlog(blogDO);
logger.info(String.valueOf(i));
// sqlSession 需要提交事务, 关闭事务
sqlSession.commit();
sqlSession.close();
}
@Test
public void testDelete() {
SqlSession sqlSession = sqlSessionFactory.openSession();
BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
int i = mapper.deleteByBid(3);
logger.info("testDelete: {}", i);
sqlSession.commit();
sqlSession.close();
}
@Test
public void testUpdate() {
SqlSession sqlSession = sqlSessionFactory.openSession();
BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
BlogDO blogDO = new BlogDO();
blogDO.setBid(1);
blogDO.setName("name测试更新");
int i = mapper.updateByBid(blogDO);
logger.info("testUpdate: {}", i);
sqlSession.commit();
sqlSession.close();
}
@Test
public void testSelect() throws IOException {
SqlSession sqlSession = sqlSessionFactory.openSession();
BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
BlogDO blogDO = mapper.selectBlogById(1);
logger.info(blogDO.toString());
}
说明:如果有需要讨论的同学,麻烦您的问题打在评论区交流呀 这边文章仅做快速入门介绍,如需要了解MyBatis配置文件更多的使用方式。请参考官方文档 mybatis.net.cn/index.html