您的位置:首页 > 数据库

MyBatis起步

2016-09-28 16:00 190 查看
MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。

基本使用方法如下:

一、准备数据表

首先创建一个数据库mybatis并在mybatis数据库下创建usertable 表

CREATE TABLE usertable (
id int(11) NOT NULL AUTO_INCREMENT,
username varchar(10) DEFAULT NULL,
sex int(11) DEFAULT NULL,
address varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 |

随便加入一些测试数据:



二、进入正题

1、创建工程

打开eclipse创建一个Java工程,在工程中加入Junit4依赖方便测试,目录结构如下:



添加mybatis依赖和数据库连接驱动:

mybatis-3.2.7.jar

mysql-connector-java-5.1.7-bin.jar

2、在com.po包下写一个封装数据的简单类User,添加getters、setters和toString方法

package com.po;

public class User {
private int id;
private String username;
private int sex;
private String address;

public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", sex=" + sex + ", address=" + address + "]";
}
}

3、全局配置文件
首先是一个全局配置文件(名称可以自己制定),我这里取名为SqlMapConfig.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>

<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理-->
<transactionManager type="JDBC" />
<!-- 数据库连接池-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="123" />
</dataSource>
</environment>
</environments>
<mappers>

</mappers>
</configuration>

注意这里的mappers标签,接下来还要添加东西。
4、创建mapper

在config文件夹下创建一个folder名为mapper

在mapper下创建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.dao.UserMapper">
<select id="findUserById" parameterType="int" resultType="com.po.User">
select * from usertable where id = #{id}
</select>

<insert id="insertUser" parameterType="com.po.User">
insert into usertable(username, sex,address) values(#{username}, #{sex}, #{address})
</insert>
</mapper>这里封装了两个数据库操作
注意这里的namespace属性为com.dao.UserMapper这是我们要定义的接口的全限定类名,我们要定义一个接口,mybatis就会自动依据mapper配置文件自动生成代理类,这样就可以通过调用接口中的方法来实现对数据库的操作了。

在写完mapper配置文件后要记得在第三部的全局配置文件中注册该mapper。方法为:在<mappers></mappers>标签中添加:

<mapper resource="mapper/UserMapper.xml"/>
5、定义dao接口
在定义dao接口之前要知道,接口和上面定义的mapper是一一对应的。对应规范如下:

1、 Mapper.xml文件中的namespace与mapper接口的类路径相同。

2、 Mapper接口方法名和Mapper.xml中定义的每个statement的id相同 (一个sql语句就是一个statement)

3、 Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同

4、 Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同

package com.dao;

import com.po.User;

public interface UserMapper {
public User findUserById(int id) throws Exception;
public void insertUser(User user) throws Exception;
}<strong>
</strong>

三、测试

接下来可以写一个测试类测试一下了:

package com.test;

import java.io.IOException;
import java.io.InputStream;

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.junit.Before;
import org.junit.Test;

import com.dao.UserMapper;
import com.po.User;

public class TestUserMapper {
private SqlSessionFactory sqlSessionFactory;

@Before
public void setUp() throws IOException{
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}

@Test
public void testFindUserById() throws Exception{
//获取session
SqlSession sqlSession = sqlSessionFactory.openSession();
//获取mapper接口的代理对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//调用代理对象的方法
User user = userMapper.findUserById(9);
System.out.println(user);

sqlSession.close();
}

}


简单说明一下,mybatis的使用流程是这样的:
setUp方法中的代码可以作为一个模板来使用,在这个方法中最后通过SqlSessionFactoryBuilder来创建一个SqlSessionFactory的实例,对于所有的sql操作一个实例就够了。

然后在每个dao方法中都要由SqlSessionFactory来创建一个SqlSession实例

调用getMapper方法传入UserMapper的类类型生成代理对象,而后就可以进行增删改查操作了

最后切记要关闭sqlSession释放资源。

执行测试方法可以看到输出:

User [id=9, username=kitty, sex=1, address=NewYork]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息