标签:
在我看来, 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();
}
}
}
标签:
原文地址:http://www.cnblogs.com/ngu113619/p/4802353.html