idea对Mybatis框架的简单实现
什么是Mybatis?
- 基于java的数据库持久化框架。 使用java开发,做数据持久化。
- 它是一个轻量级,半自动的orm持久化框架。一个轻量级,一个orm框架(Hibernate)数据库表和对象映射。
- 通过映射xml来完成数据操作。在映射文件里面写sql语句
ORM: Object Relation Mapping 对象关系映射
mybatis是对jdbc的封装
mybatis环境搭建:
0. 数据库表
1. 创建maven project
2. pom.xml 文件里面引入 mybatis和mysql依赖
<dependencies>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
<!-- junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
3. 创建实体类, dao接口实现增删改查
User:
package com.pojo;
import java.util.Date;
/**
* @author 叫兽
*/
public class User {
private Long id;
private String name;
private String email;
private Date birth;
public User() {
}
public User(Long id, String name, String email, Date birth) {
this.id = id;
this.name = name;
this.email = email;
this.birth = birth;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", email='" + email + '\'' +
", birth=" + birth +
'}';
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
}
4. 创建并配置mybatis配置文件
需要先引入mybatis-3-config.dtd文件
settings---->Schemas and DTDs------>右边点击 + 新建 ------>弹框 uri 输入 http://mybatis.org/dtd/mybatis-3-config.dtd file 选择本机mybatis-3-config.dtd文件 ---->apply—>ok
创建数据库连接的properties文件 db.properties,配置数据库连接相关信息
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&userSSL=false
jdbc.username=root
jdbc.password=2000
创建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中还可以配置一些属性名和属性值 -->
</properties>
<!-- <!–别名配置 方式一–>-->
<!-- <typeAliases>-->
<!-- <typeAlias type="com.pojo.User" alias="User"/>-->
<!-- </typeAliases>-->
<!-- 全局配置参数,需要时再设置 -->
<!-- http://www.mybatis.org/mybatis-3/zh/configuration.html -->
<!-- 别名定义 方式二-->
<typeAliases>
<package name="com.pojo"/>
</typeAliases>
<!--配置连接数据库信息-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<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>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
5. 创建并配置mybatis映射文件
UserMapper.xml
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dao.UserDao">
<!--查询-->
<select id="findUserById" resultType="User" parameterType="long">
select * from stu where id=#{id}
</select>
<select id="findAllUser" resultType="User" >
select * from stu
</select>
<!--插入-->
<insert id="insertUser">
insert into stu values(#{id},#{name},#{email},#{birth})
</insert>
<!--删除-->
<delete id="deleteUserById">
delete from stu where id=#{id}
</delete>
<!--更新-->
<update id="updateUserById">
update stu set name=#{name} where id=#{id}
</update>
</mapper>单元测试调用
6.创建Mybatis工具类简化代码
package com.utils;
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 java.io.IOException;
import java.io.InputStream;
/**
* @author 叫兽
*/
public class MyBatisUtils {
static private SqlSessionFactory sqlSessionFactory;
static {
//访问mybatis读取student数据
InputStream in = null;
try {
in = Resources.getResourceAsStream("mybatis-config.xml");
//创建SqlSessionFactory对象
sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSession(){
//创建SqlSession对象,从SqlSessionFactory中获取SQLSession
SqlSession session = null;
if(sqlSessionFactory!=null){
session = sqlSessionFactory.openSession(true);
}
return session;
}
}
7.单元测试调用
import com.dao.UserDao;
import com.pojo.User;
import com.utils.MyBatisUtils;
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.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
/**
* @author 叫兽
*/
public class Test1 {
@Test
public void testQueryOne() throws IOException {
SqlSession session = MyBatisUtils.getSession();
//执行SQL语句,
UserDao userDao = session.getMapper(UserDao.class);
User user = userDao.findUserById(2L);
System.out.println(user);
//关闭资源
session.close();
}
@Test
public void testInsertOne() throws IOException {
SqlSession session = MyBatisUtils.getSession();
//执行SQL语句,
User user = new User();
user.setId(98L);
user.setName("张飞");
user.setEmail("123@qq.com");
user.setBirth(new Date());
UserDao userDao = session.getMapper(UserDao.class);
int num = userDao.insertUser(user);
//增删改后要提交事务否则数据回滚 在openSession中设置true
//session.commit();
System.out.println(num);
//关闭资源
session.close();
}
@Test
public void testQueryAll() throws IOException {
SqlSession session = MyBatisUtils.getSession();
//执行SQL语句,
UserDao userDao = session.getMapper(UserDao.class);
List<User> user = userDao.findAllUser();
System.out.println(user);
//关闭资源
session.close();
}
@Test
public void testDeleteById() throws IOException {
SqlSession session = MyBatisUtils.getSession();
//执行SQL语句,
UserDao userDao = session.getMapper(UserDao.class);
int result = userDao.deleteUserById(99L);
System.out.println(result);
//关闭资源
session.close();
}
@Test
public void testUpdateUserById() throws IOException {
SqlSession session = MyBatisUtils.getSession();
//执行SQL语句,
UserDao userDao = session.getMapper(UserDao.class);
User user = new User();
user.setName("露露");
user.setId(2L);
int result = userDao.updateUserById(user);
System.out.println(result);
//关闭资源
session.close();
}
}
MyBatis配置文件:
类型别名(typeAliases)
类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。例如:
<typeAliases>
<typeAlias alias="User" type="com.zjj.pojo.User"/>
<typeAlias alias="Student" type="com.zjj.pojo.Student"/>
</typeAliases>
当这样配置时,User可以用在任何使用 com.zjj.pojo.User 的地方。
也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean,比如:
<typeAliases>
<package name="com.zjj.pojo"/>
</typeAliases>
Mappers 映射文件(映射文件路径)
Mapper配置的几种方法:
第一种(常用)
如:
第二种
使用完全限定路径
如:
第三种
使用mapper接口类路径
如:
注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。
第四种(推荐)
注册指定包下的所有mapper接口
如:
注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。