有关 MyBatis 的详细信息,可以查看MyBatis官方文档
在我看来, MyBatis 是用来进行数据库的连接和管理的包,使用 MyBatis 必须将对应的jar包添加到classpath中。
不使用 MyBatis, 通过JDBC进行数据库的操作方式如下:
数据库连接相关参数:
// JDBC 连接所需参数
String MYSQL_URL = "jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8";
String USERNAME = "root";
String PASSWORD = "root";
// JDBC 对应的MySQL驱动
String MYSQL_DRIVER = "com.mysql.jdbc.Driver";
使用 Statement
执行SQL语句
Class.forName(MYSQL_DRIVER);
Connection connection = DriverManager.getConnection(MYSQL_URL, USERNAME, PASSWORD);
Statement statement = connection.createStatement();
String SQL = "SELECT * FROM user";
ResultSet resultSet = statement.executeQuery(SQL);
或者使用 preparedStatement
,来避免一些SQL注入漏洞
Class.forName(MYSQL_DRIVER);
Connection connection = DriverManager.getConnection(MYSQL_URL, USERNAME, PASSWORD);
String preparedSql = "SELECT * FROM user WHERE username = ? AND password = ?";
PreparedStatement preparedStatement = connection.prepareStatement(preparedSql);
preparedStatement.setString(1, "shisong"); // 第一个'?'的值
preparedStatement.setString(2, "123456"); // 第二个'?'的值
ResultSet resultSet = preparedStatement.executeQuery();
这样不仅需要添加 try catch
,而且还要自己关闭不再使用的数据库连接。而使用MyBatis,这些工作就不需要自己管理了。
MyBatis 是以 SqlSessionFactory
的实例为中心的。
SqlSessionFactory
的实例可以通过 SqlSessionFactoryBuilder
获得。
SqlSessionFactoryBuilder
可以从 XML
配置文件(或一个预先定制的 Configuration
的实例)构建出 SqlSessionFactory
的实例。
一般在一个应用中,一个数据库只会对应一个SqlSessionFactory
,所以一般我们都把SqlSessionFactory
定义成单例模式,或通过Spring
等进行注入。
通过 XML
配置文件获得 SqlSessionFactory
的方式
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
其中的resource是mybatis配置文件,其内容稍后讲,先来看如何使用sqlSessionFactory
进行数据库操作
SqlSession session = sqlSessionFactory.openSession();
try {
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.selectUserById(1);
} finally {
session.close();
}
其中的UserMapper
和User
都是自己定义的类,User
是与数据库中的user表对应的bean,
UserMapper
是一个对数据库进行操作的接口,要有一个UserMapper.xml文件与之对应,
selectUserById
就是接口定义的方法,其实现方式有两种,一种是在xml文件中,一种是通过注解,之后的文章会具体讲。
项目的文件清单
src
|--com.test.mybatis
| |--bean
| | |--User.java
| |--mapper
| | |--UserMapper.java
| |--TestMybatis.java
resources
|--mappers
| |--UserMapper.xml
|--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>
<typeAliases>
<typeAlias alias="User" type="com.test.mybatis.bean.User"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mappers/UserMapper.xml"/>
</mappers>
</configuration>
Mapper文件: mappers/UserMapper.xml
<?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.test.mybatis.mapper.UserMapper">
<select id="selectUserById" parameterType="java.lang.Integer" resultType="User">
SELECT id, username, password
FROM user
where id = #{id}
</select>
</mapper>
与数据库对应的bean:User.java
public class User {
private Integer id;
private String username;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
对数据库的操作接口: UserMapper.java
public interface UserMapper {
public User selectUserById(Integer id);
}
测试类: TestMybatis.java
public class TestMybatis {
private static final Logger LOGGER = LoggerFactory.getLogger(TestMybatis.class);
private static SqlSessionFactory sqlSessionFactory = null;
static {
try {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
LOGGER.error("获取资源文件 'mybatis-config.xml' 失败", e);
}
}
public static void main(String[] args) {
SqlSession session = sqlSessionFactory.openSession();
try {
UserMapper userMapper = session.getMapper(UserMapper.class);
User user = userMapper.selectUserById(1);
userMapper.selectAll();
} finally {
session.close();
}
}
}