之前做项目的时候,接触到服务器端开发,当时服务器是用SpringMVC做后台服务 MyBatis做数据库连接 Mysql数据库 在那之前 我只接触过JavaWeb的简单的Servlet的基本用法,在边学边开发的过程中学了一部分SpringMVC和MyBatis的技术 SpringMVC做接口 用到的东西比较少,主要是数据库处理操作用MyBatis的时候遇到各种问题。现在终于有时间来系统化一些的学习MyBatis。
关于这个问题,我想你能看到我这个笔记 你就应该能知道他是什么。这里我借用百度百科的一句话来描述 MyBatis是什么
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
简单来说,MyBatis能帮助我们快速开发基于Java + 数据库的程序,能帮助我们快速映射POJO对象和数据库中的数据 同时支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。
安装MyBatis 就是在我们的项目中配置 添加MyBatis 让我们可以在项目中使用它。
https://github.com/mybatis/mybatis-3/releases
在这里 找最新版下载 我写这篇文章的时候 最新版是 3.4.2
下载后 我们得到一个 mybatis-3.4.2.zip 解压之后找到 mybatis-3.4.2.jar 这个jar文件。然后把它添加到我们的Java项目中的lib目录下再添加一下项目依赖。我们的项目就可以使用MyBatis了。
<注意>
为了能够让我们的项目正常连接到数据。我们还需要下载我们所使用的数据库的连接驱动 比如我使用的是mysql数据库 我就下载了 mysql-connector-java:5.1.41的驱动添加到项目的依赖库中。
MyBatis的配置 相对于其他框架来说应该算是比较简单的。下面我们就来看看MyBatis的基本配置
MyBatis的配置可以放到一个文件里。也可以放到多个文件里。一个文件。是它的主配置文件,另一个文件是一些变动的配置信息 数据库连接信息。
下面我们先来看第一种配置方式(一个文件):mybatis-config.xml
<configuration>
<typeAliases>
<package name="com.brok1n.web.java.springmvcdemo1.bean"/>
typeAliases>
<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/mybatis?useUnicode=true&characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
dataSource>
environment>
environments>
<mappers>
<mapper resource="UserMapper.xml"/>
mappers>
configuration>
这就是一个基本的一个文件的的配置MyBatis的方式,配置了包级别的别名定义,配置了一个MySQL数据库连接 还配置了一个映射器,我们先了解一下上面的内容。我们下面来看看两个文件的方式 具体的配置信息后面会做详细介绍
MyBatis两个文件的配置: mybatis-config.xml
<configuration>
<properties resource="jdbc.properties" />
<typeAliases>
<package name="com.brok1n.web.java.springmvcdemo1.bean"/>
typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
dataSource>
environment>
environments>
<mappers>
<mapper resource="UserMapper.xml"/>
mappers>
configuration>
jdbc.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8
username=root
password=jacklist
好了。这里是两个配置文件来配置MyBatis的方式。可以看到 两个文件的这种方式 我们把数据库连接相关的信息都配置到了properties文件中 方便后期配置、维护等工作。 我们现在就用第二种 两个文件的这种方式来配置 MyBatis。
我们先来写一个简单的例子。让我们的MyBatis展现一下它的能力。
这是我们的基本的项目结构信息。
我们来看看我们的代码。
UserMapper.xml
<mapper namespace="com.brok1n.web.java.springmvcdemo1.mapper.UserMapper">
<select id="selectUser" resultType="user">
select * from user where id = #{id}
select>
mapper>
数据库
id username password sex age qq weichart email
10000 brok1n 123456 女 18 452700765 452700765@qq.com
10004 brok3n 123123 女 18 245586408 245586408@qq.com
10005 brok3n 123123 男 18 245586408 245586408@qq.com
10007 brok3n 123123 男 18 245586408 245586408@qq.com
10008 brok3n 123123 女 18 245586408 245586408@qq.com
DbUtils.java
public class DbUtils {
private static volatile SqlSessionFactory sqlSessionFactory;
public static SqlSessionFactory obtionSqlSessionFactory()
{
if( sqlSessionFactory == null )
{
synchronized (DbUtils.class)
{
if(sqlSessionFactory == null )
{
sqlSessionFactory = getSqlSessionFactory();
}
}
}
return sqlSessionFactory;
}
private static SqlSessionFactory getSqlSessionFactory()
{
String resource = "mybatis-config.xml";
SqlSessionFactory sqlSessionFactory = null;
try {
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build( inputStream );
} catch (IOException e) {
e.printStackTrace();
}
return sqlSessionFactory;
}
}
来看看我们的UserMapper.java
public interface UserMapper {
User selectUser(String id);
}
User.java
public class User {
private int id;
private String username;
private String password;
private String sex;
private int age;
private String qq;
private String weichart;
private String email;
getter and setter...
}
来看看我们的HelloController.java
@Controller
public class HelloController {
@RequestMapping( value = "selectUser.do", method = RequestMethod.POST)
@ResponseBody
public String selectUser(HttpServletRequest request, String uid )
{
SqlSessionFactory factory = DbUtils.obtionSqlSessionFactory();
SqlSession sqlSession = null;
try {
sqlSession = factory.openSession();
UserMapper userMapper = sqlSession.getMapper( UserMapper.class );
User user = userMapper.selectUser(uid);
if( user != null )
{
System.out.println("" + user.toString());
}
return JSON.toJSONString( user );
}
catch (Exception e )
{
e.printStackTrace();
sqlSession.rollback();
}
finally {
if( sqlSession != null )
{
sqlSession.close();
}
}
return "操作失败";
}
}
我们来看看我们程序里关键性代码:
SqlSessionFactory factory = DbUtils.obtionSqlSessionFactory();
SqlSession sqlSession = factory.openSession();
UserMapper userMapper = sqlSession.getMapper( UserMapper.class );
User user = userMapper.selectUser(uid);
首先 我们获取了全局的SqlSessionFactory 用它来创建了一个SqlSession对象,之后调用getMapper方法获得了传入的UserMapper类类型的对象 然后直接调用它的方法 来操作数据库。 UserMapper是一个接口 用来声明要对数据库做的sql操作。
这一篇 我们来基本的了解MyBatis的简介、安装、基础配置、简单用法。后面的文章 我会陆续的介绍MyBatis的更详细的东西。
2017/3/27
by brok1n