一,搭建Mybatis框架
1.创建工程,创建模块,创建包(用分层结构思想)
a. controller 做测试用(MybatisDemo)
b. bean 实体类(User)
c. dao 访问数据库成,面向接口编程(UserMapper、UserMapper.xml)这两个名字要一模一样,
d. util 工具包,连接工厂(MybatisSqlSesionFactoryUtils)
e. Mybati核心配置文件,(mybatis-config.xml)复制在src下,此文件可以在mybatis官网上下载
f. 在模块下创建文件名为lib,导包
数据库SQL脚本
CREATE DATABASE user;
USE user;
CREATE TABLE `tb_user` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`loginName` VARCHAR(23) DEFAULT NULL,
`userName` VARCHAR(23) DEFAULT NULL,
`passWord` VARCHAR(23) DEFAULT NULL,
`create_date` DATETIME DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
/*Data for the table `tb_user` */
INSERT INTO `tb_user`(`id`,`loginName`,`userName`,`passWord`,`create_date`) VALUES
(1,'swk','齐天大圣','tangtang','2019-11-24 12:00:37'),
(3,'tangtang','大唐唐玄奘','kongkong','2019-11-24 12:08:22'),
(4,'zbj','天棚元帅','change','2019-11-24 12:08:22'),
(5,'change','嫦娥仙子','wugang','2019-11-24 12:08:22'),
(6,'ptlz','菩提老祖','sunwukong','2019-11-11 11:11:11'),
(7,'rlfz','如来佛祖','ptlz','2019-11-11 11:11:11');
二、创建 MybatisSqlSesionFactoryUtils 会话工厂工具类
public class MybatisSqlSessionFactoryUtils {
// 1、定义一个静态的会话工厂对象存储。
public static SqlSessionFactory sqlSessionFactory;
// 2、正式加载会话工厂对象。
static {
try {
// mybatis的Resources类的方法可以直接是类路径src下找资源,无需带 "/"
InputStream is = Resources.getResourceAsStream( "mybatis-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 返回一个Mybatis与数据库的会话对象SqlSession
* @return
*/
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
/**
* 关闭会话
* @param sqlSession
*/
public static void close(SqlSession sqlSession){
if(sqlSession != null) sqlSession.close();
}
}
三、通过会话对象SqlSession(数据库连接)操作数据库。
1.定义了一个测试类,定义实体类User.java
public class User {
private int id;
private String loginName;
private String userName;
private String passWord;
private Date createDate;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getLoginName() {
return loginName;
}
public void setLoginName(String loginName) {
this.loginName = loginName;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", loginName='" + loginName + '\'' +
", userName='" + userName + '\'' +
", passWord='" + passWord + '\'' +
", createDate=" + createDate +
'}';
}
}
2.我们需要在持久层dao包下建立一个访问数据表的接口:UserMapper.java
public interface UserMapper {
List<User> findAll();
int deleteById(int id);
int save(User user);
}
3.得到一个与接口对应的映射文件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.itheima.dao.UserMapper">
<!-- List<User> findAll();
id注意:id名称必须与被服务方法的名称一模一样,否则报错!
resultType:在查询中才可以使用的,配置查询结果自动映射的对象类型!
-->
<select id="findAll" resultType="com.itheima.bean.User">
select * from tb_user
</select>
<!-- int deleteById(int id);
注意:参数类型申明永远可以不写:parameterType="int"
-->
<delete id="deleteById" >
delete from tb_user where id = #{xxx}
</delete>
<!-- int save(User user); 注意:参数类型申明永远可以不写: parameterType="com.itheima.bean.User"-->
<insert id="save" >
INSERT INTO `tb_user` (
`loginName`,
`userName`,
`passWord`,
`create_date`
)
VALUES
(
#{loginName},
#{userName},
#{passWord},
#{createDate}
)
</insert>
</mapper>
四、开始操作数据库测试类(MybatisDemo)
public class MybatisDemo {
@Test
public void selectAll(){
// a、获取Mybatis框架与特定数据的会话
SqlSession sqlSession = MybatisSqlSessionFactoryUtils.getSqlSession();
// b、获取数据访问层接口的代理对象:其实会根据类型的名称自动去加载映射文件UserMapper.xml文件成为实现类对象!
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// c、开始查询全部数据
List<User> users = userMapper.findAll();
System.out.println(users);
// d.关闭会话
MybatisSqlSessionFactoryUtils.close(sqlSession);
}
@Test
public void deleteById(){
// a、获取Mybatis框架与特定数据的会话
SqlSession sqlSession = MybatisSqlSessionFactoryUtils.getSqlSession();
// b、获取数据访问层接口的代理对象:其实会根据类型的名称自动去加载映射文件UserMapper.xml文件成为实现类对象!
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// c、开始删除数据
int count = userMapper.deleteById(4);
System.out.println("删除了"+ count+"条数据!");
sqlSession.commit(); // DML必须提交,否则数据不生效,Mybatis默认支持了事务!
// d.关闭会话
MybatisSqlSessionFactoryUtils.close(sqlSession);
}
@Test
public void insert(){
// a、获取Mybatis框架与特定数据的会话
SqlSession sqlSession = MybatisSqlSessionFactoryUtils.getSqlSession();
// b、获取数据访问层接口的代理对象:其实会根据类型的名称自动去加载映射文件UserMapper.xml文件成为实现类对象!
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// c、开始添加数据
User user = new User();
user.setUserName("赵飞燕");
user.setPassWord("liushi");
user.setCreateDate(new Date());
user.setLoginName("zfy");
int count = userMapper.save(user);
System.out.println("保存了:" + count +"条数据!");
sqlSession.commit(); // DML必须提交,否则数据不生效,Mybatis默认支持了事务!
// d.关闭会话
MybatisSqlSessionFactoryUtils.close(sqlSession);
}
}