简介
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
接口式编程(高级使用方式)
- 引入依赖(或加入jar包)
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>x.x.x</version>
</dependency>
- 在resources下创建config XML配置文件(修改数据源(可以直接设置,也可以通过配资源文件引入)、注册SQL配置文件)
<?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/qingdb"/>
<property name="username" value="root"/>
<property name="password" value="1213151"/>
</dataSource>
</environment>
</environments>
<mappers>
/*注册SQL的XML文件*/
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
- 新建Sql配置文QingUserMapper.xml文件(命名空间为接口的全类名,select语句的id为接口方法名,MyBatis自动映射)
<?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.chase.qing.mybatis.DUserMapper">
/*namespace:命名空间
id:唯一标识符
resultType:返回值类型
*/
<select id="selectQingUser" resultType="com.chase.qing.entity.QingUser">
select * from quser where unumber = #{unumber}
/*如果字段名和数据库不匹配,可以使用别名的方式*/
/*解决异常*/
<if test="_parameter != null">
and unumber = #{unumber}
</if>
</select>
</mapper>
- 新建dao接口QingUserMapper(新建dao包) 接口中包含方法:将方法与sql绑定,(无需实现接口)自动创建代理对象,代理对象执行增删改查。
package com.chase.qing.mybatis;
import com.chase.qing.entity.QingUser;
import org.apache.ibatis.annotations.MapKey;
import java.util.List;
import java.util.Map;
public interface DUserMapper {
QingUser selectQingUser(int id);
int deleteQingUser(int id);
}
- 创建一个类(获取sqlsessionfactory 获取sqlsession 获取接口的实现类(无需创建实现类)对象、注意修改XML配置文件路径)
package com.chase.qing.mybatis;
import com.chase.qing.entity.QingUser;
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.springframework.stereotype.Service;
import java.io.IOException;
import java.io.InputStream;
@Service
public class MybatisTest {
//创建SqlSessionFactory
public SqlSessionFactory getSqlSessionFactory() throws IOException {
//加载配置文件
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
// SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
return new SqlSessionFactoryBuilder().build(inputStream);
}
public void Test() throws IOException {
//产生sqlsession实例
SqlSession session = getSqlSessionFactory().openSession();
try {
//获取代理对象
DUserMapper mapper = session.getMapper(DUserMapper.class);
QingUser qingUser = mapper.selectQingUser(1);
System.out.println(qingUser);
} finally {
// sqlSession相当于与数据库的一次回话,用完必须关闭,释放资源。
// sqlSession和connection一样不是线程安全的,每次都应该获取一个新的对象。
session.close();
}
}
- 小结
- 以上就是使用MyBatis常用的使用方式,使用接口可以直接映射到在命名空间中同名的 Mapper 类,并将已映射的 select 语句中的名字、参数和返回类型匹配成方法。
这样有很多优势,首先它不是基于字符串常量的,就会更安全;其次,如果你的 IDE 有代码补全功能,那么你可以在有了已映射 SQL 语句的基础之上利用这个功能。
喜欢的话可以点点关注,或者添加作者微信,欢迎随时来撩!