MyBatis的基本配置
1.什么是MyBatis?
mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement 等繁杂的过程。
mybatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来,并通过 java 对象和statement 中sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并返回。
采用 ORM 思想解决了实体和数据库映射的问题,对 jdbc 进行了封装,屏蔽了 jdbc api 底层访问细节,使我们不用与 jdbc api 打交道,就可以完成对数据库的持久化操作
2.如何配置MyBatis?
1.如果在普通项目中,首先需要下载jar包到lib目录下,并依赖(As a Library)
http://www.mybatis.org/mybatis-3/zh/getting-started.ht
2.在maven中,需要在pom.xml文件中引入
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
<scope>runtime</scope>
</dependency>
3.我们在bean(实体类)下新建一个类,然后再dao(接口类)下新建一个接口,接口中写你所需要实现的方法
4.maven工程在resources下创建和dao相同的目录,但是切记,要一级一级创建,不要一次性全部写完
5.在resources下编写SqlMapperConfig(MyBatis的核心配置文件)
6.编写dao对应的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">
<!--namespace为所对应的接口-->
<mapper namespace="org.best.dao.UserDao">
</mapper>
7.在xml中实现dao中的方法
<?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">
<!--namespace为所对应的接口-->
<mapper namespace="org.best.dao.UserDao">
<!-- id为方法名 resultType 为返回值类型 parameterType为参数类型 -->
<select id="findAll" resultType="user">
select * from user
</select>
</mapper>
8.编写测试类
3.SqlMapperConfig
<?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和environment的id必须一致,否则会出现空指针异常-->
<typeAliases>
<!--给指定对象起别名-->
<!-- <typeAlias type="org.best.bean.User" alias="user"></typeAlias>-->
<!--给整个包下的对象起别名-->
<package name="org.best.bean"/>
</typeAliases>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<!--POOLED为使用池,UNPOOLED为不使用池-->
<dataSource type="POOLED">
<!--配置数据源的四个基本参数,可使用配置文件-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<!--数据库地址和名字-->
<property name="url" value="jdbc:mysql://localhost:3306/mybatis_test"/>
<!--数据库用户名-->
<property name="username" value="root"/>
<!--数据库密码-->
<property name="password" value="123"/>
</dataSource>
</environment>
</environments>
<!--引入dao接口的映射文件-->
<mappers>
<!--mapper为引用单个映射文件-->
<!-- <mapper resource="org/westos/dao/IUserDao.xml"></mapper>-->
<!--package为引用整个包下的映射文件-->
<package name="org.best.dao"/>
</mappers>
</configuration>
4.bean中的实体类
package org.best.bean;
import java.util.Date;
public class User {
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
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 Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getSex() {
return sex;
}
public void setSex(String 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 + '\'' +
", birthday=" + birthday +
", sex='" + sex + '\'' +
", address='" + address + '\'' +
'}';
}
}
5.dao中的接口
package org.best.dao;
import org.best.bean.User;
import java.util.List;
public interface UserDao {
List<User> findAll();
}
6.测试类
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.best.bean.User;
import org.best.dao.UserDao;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class TestUser {
private InputStream resourceAsStream;
private SqlSession sqlSession;
@Before
public void init() throws IOException {
resourceAsStream = Resources.getResourceAsStream("SqlMapperConfig.xml");
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
sqlSession = build.openSession();
}
@Test
public void TestSelect(){
UserDao mapper = sqlSession.getMapper(UserDao.class);
List<User> list = mapper.findAll();
for (User user : list) {
System.out.println(user);
}
}
@After
public void destroy() throws IOException {
resourceAsStream.close();
sqlSession.close();
}