MyBatis是什么
这里就引用一下,Mybatis官方文档的定义,来简单说明一下Mybatis的整体作用:MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
如何使用
普通Java项目使用Mybatis
这里就不再赘述了,官方文档里面有保姆级别的介绍,大家可以去参考,地址是:https://mybatis.net.cn/getting-started.html
Spring使用Mybatis
- 引入Maven配置
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.10</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.7</version>
</dependency>
- 创建DB配置文件
db.driverClass=com.mysql.jdbc.Driver
db.url=jdbc:mysql://127.0.0.1:3306/mydb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
db.username=root
db.password=root
- applicationContenxt.xml中增加配置加载
<context:property-placeholder location="classpath:db.properties"/>
- applicationContenxt.xml中初始化数据源
<bean id="datasource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${db.driverClass}"/>
<property name="url" value="${db.url}"/>
<property name="username" value="${db.username}"/>
<property name="password" value="${db.password}"/>
</bean>
- applicationContenxt.xml中创建sqlSessionFactory,并指定mapper xml位置
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="datasource"/>
<property name="mapperLocations" value="classpath*:com/vinson/learn/dao/**/*.xml"/>
</bean>
applicationContenxt.xml中指定mapper位置
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.vinson.learn.dao"/>
</bean>
其中,Mapper和其对应的代码如下:
package com.vinson.learn.dao;
import com.vinson.learn.bean.User;
import org.apache.ibatis.annotations.Param;
public interface UserDao {
// @Select("select * from user where name = #{name}")
User getByName(@Param("name") String name);
void addUser(User user);
}
<?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.vinson.learn.dao.UserDao">
<insert id="addUser">
insert into user(name,age) values (#{name}, #{age})
</insert>
<select id="getByName" resultType="com.vinson.learn.bean.User">
select * from user where name = #{name}
</select>
</mapper>
-
目录结构如下:
-
如果需要开启注解事务的可以,参照如下方式,applicationContenxt.xml中增加:
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<constructor-arg ref="datasource" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
- 代码中的使用方式是:
@Autowired
private UserDao userDao;
@Transactional(rollbackFor = Exception.class)
@Override
public User getUserByName() {
User user = userDao.getByName("mike");
//....省略.....