搭建mybatis框架

搭建mybatis框架
1.创建一个项目(maven,web)
2.引入架包
<!-- mybatis架包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>

<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>

<!-- mysql架包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency>
3.编写配置文件
src目录下面创建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>

<!-- 读取数据库配置文件 -->
<properties resource="db.properties"></properties>

<!-- 设置全局参数 -->
<settings>
<!-- 开启二级缓存 默认值为true -->
<setting name="cacheEnabled" value="true" />
</settings>

<!-- 给实体类定义别名 -->
<typeAliases>
<!--不常用:单个实体别名定义:type:类型的路径, alias:别名
<typeAlias type="com.mybatis.entity.User" alias="xxxuser" />
-->
<!-- 常用:批量实体别名定义 name:指定包名,mybatis自动扫描包中的类,自动定义实体别名,别名就是类名(首字母大写或小写都可以),映射文件中只写别名(类名)就行不用写全路径名了 -->
<package name="com.mybatis.entity" />
<!-- 可以指定多个 -->
<package name="com.mybatis.xx" />
<package name="com.mybatis.xxx" />
</typeAliases>

<!--配置连接,和spring整合后 environments配置连接将废除 -->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理,事务控制由mybatis -->
<transactionManager type="JDBC" />
<!--数据库连接池,由mybatis管理 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>

<!-- 加载映射文件 -->
<mappers>
<!--通过接口类批量加载映般文件(接口名称和映射文件名称保持一致) -->
<package name="com.mybatis.dao" /><!-- 写的不对肯定报错 -->
</mappers>
</configuration>


src目录下面创建db.properties配置文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/oa
jdbc.username=root
jdbc.password=root

4.执行sql语句,操作数据库

1.创建实体
public class UserInfo {
private String username;
private String password;
private Integer phone;
get/set......


2.创建dao接口类
public interface UserInfoDao {

//查询全部用户信息
public List<UserInfo> selectuserinfo();
//根据用户id查询单个用户信息
public UserInfo selectuserinfoByid(int id);
}

3.创建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="com.hyxy.Dao.UserInfoDao">

<select id="selectuserinfo" resultType="com.hyxy.entity.UserInfo">
select * from user
</select>

</mapper>

4.controller调用dao执行sql语句
public class UserController {

// 读取mybatis配置文件
private static Reader reader;
/**
* SqlSessionFactory是一个接口,接口中定义了openSession的不同重载方法,SqlSessionFactory的最佳使用范围是整个应用运行期间,
* 一旦创建后可以重复使用,通常以单例模式管理SqlSessionFactory。
*/
private static SqlSessionFactory sqlSessionFactory;
@Test
public void selectuserAll() throws IOException {
//读取mybatis配置文件,并生成输入流
reader = Resources.getResourceAsReader("mybatis-config.xml");
/**
* SqlSessionFactoryBuilder用于创建SqlSessionFacoty,
* SqlSessionFacoty一旦创建完成就不需要SqlSessionFactoryBuilder了,
* 因为SqlSession是通过SqlSessionFactory生产,
* 所以可以将SqlSessionFactoryBuilder当成一个工具类使用,
* 最佳使用范围是方法范围即方法体内局部变量。
*/
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
//根据sqlSessionFactory打开session
/**
*SqlSession中封装了对数据库的操作,如:查询、插入、更新、删除等。
通过SqlSessionFactory创建SqlSession,
而SqlSessionFactory是通过SqlSessionFactoryBuilder进行创建。
SqlSession是一个面向用户的接口, sqlSession中定义了数据库操作方法。
每个线程都应该有它自己的SqlSession实例。SqlSession的实例不能共享使用,
它也是线程不安全的。因此最佳的范围是请求或方法范围。
绝对不能将SqlSession实例的引用放在一个类的静态字段或实例字段中。
SqlSession sqlSession = sqlSessionFactory.openSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<UserInfo> lists = userDao.selectuserAll();
System.out.println(lists.size());
for (UserInfo userInfo : lists) {
System.out.println(userInfo.getUsername());
}
}
@Test
public void selectuserById() throws IOException {
//读取mybatis配置文件,并生成输入流
reader = Resources.getResourceAsReader("mybatis-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
//根据sqlSessionFactory打开session
SqlSession sqlSession = sqlSessionFactory.openSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
UserInfo userInfo = userDao.selectuserById(16);
System.out.println(userInfo.getUsername());
}
}
5.运行


1.使用静态代码块来加载配置文件,创建SqlSessionFacoty
public class UserController {

// 读取mybatis配置文件
private static Reader reader;
private static SqlSessionFactory sqlSessionFactory;

static{
try {
//读取mybatis配置文件,并生成输入流
reader = Resources.getResourceAsReader("mybatis-config.xml");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/**
* SqlSessionFactoryBuilder用于创建SqlSessionFacoty,
* SqlSessionFacoty一旦创建完成就不需要SqlSessionFactoryBuilder了,
* 因为SqlSession是通过SqlSessionFactory生产,
* 所以可以将SqlSessionFactoryBuilder当成一个工具类使用,
* 最佳使用范围是方法范围即方法体内局部变量。
*/
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
}

@Test
public void selectuserAll() throws IOException {
//根据sqlSessionFactory打开session
/**
*SqlSession中封装了对数据库的操作,如:查询、插入、更新、删除等。
通过SqlSessionFactory创建SqlSession,
而SqlSessionFactory是通过SqlSessionFactoryBuilder进行创建。
SqlSession是一个面向用户的接口, sqlSession中定义了数据库操作方法。
每个线程都应该有它自己的SqlSession实例。SqlSession的实例不能共享使用,
它也是线程不安全的。因此最佳的范围是请求或方法范围。
绝对不能将SqlSession实例的引用放在一个类的静态字段或实例字段中。
*/
SqlSession sqlSession = sqlSessionFactory.openSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<UserInfo> lists = userDao.selectuserAll();
System.out.println(lists.size());
for (UserInfo userInfo : lists) {
System.out.println(userInfo.getUsername());
System.out.println(new SimpleDateFormat("YYYY-MM-dd: HH:mm:ss").format(userInfo.getCreatTime()));
}
sqlSession.close();
}
@Test
public void selectuserById() throws IOException {
//根据sqlSessionFactory打开session
SqlSession sqlSession = sqlSessionFactory.openSession(true);
// SqlSession sqlSession1 = sqlSessionFactory.openSession(true);
UserDao userDao = sqlSession.getMapper(UserDao.class);
UserInfo userInfo = userDao.selectuserById(16);
System.out.println(userInfo.getUsername());
sqlSession.close();
}
}

上一篇:mybtis入门


下一篇:Mybatis工作原理