一·JavaMybatis框架
JavaMybatis是一个轻量级的Java对象关系映射(ORM)框架,它可以帮助Java开发人员更轻松地访问和操作数据库。它可以将Java对象映射到关系型数据库中的表格,从而实现对象的持久化存储。
JavaMybatis的历史可以追溯到2001年,当时Sun Microsystems(现在是Oracle公司)发布了Java Persistence API(JPA)。JPA是一种ORM框架,但它相对复杂且功能较为强大,因此很多Java开发人员需要一种更加轻量级和简单的ORM框架来解决基本的数据库操作问题。
因此,在2002年,Clinton Begin创建了iBATIS框架,它最初被称为SQL Maps。iBATIS的目标是为Java开发人员提供一种简单且易于使用的ORM解决方案,它的核心思想是将SQL语句与Java代码分离。这样,Java开发人员可以专注于编写Java代码,而不必担心编写复杂的SQL语句。
在2010年,Apache基金会宣布将iBATIS重命名为MyBatis,并将其作为Apache的顶级项目之一。MyBatis在此基础上发展了许多新特性,包括更好的性能和可扩展性,更好的错误处理机制,更好的映射功能和更好的缓存管理。
MyBatis已经成为许多Java开发人员的首选ORM框架之一,它与Spring框架集成得很好,也被广泛用于许许
二.创建MySQL数据库
drop database if exists mydb;
create database mydb;
use mydb;
create table t_user
(
uid int primary key auto_increment,
username varchar(20),
password varchar(20),
phone varchar(11),
address varchar(50)
);
insert into t_user(username,password,phone,address) values('张三','666','18965423548','南阳');
insert into t_user(username,password,phone,address) values('李四','333','18754263548','许昌');
insert into t_user(username,password,phone,address) values('小美','123','18565234759','信阳');
表如图
三.使用IDEA创建一个项目使用mybatis框架完成如下功能
在bean中我们跟数据库表创建了User实体类
public class User {
private Integer uid;
private String username;
private String password;
private String phone;
private String address;
}
在dao层创建UserDao接口放入我们的功能方法
1.需要导入Mybatis运行环境也就是Mybatis的jar文件,放入lib包中
2.在src包下创建配置文件,包含了 MyBatis 数据库连接和映射器的相关配置信息,取名为Mybatis.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="mysql">
<environment id="mysql">
<transactionManager type="jdbc"></transactionManager>
<dataSource type="pooled">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mydb"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper class="com.lu.dao.UserDao"/>
</mappers>
</configuration>
3. 在dao层里创建映射文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lu.dao.UserDao">
<select id="selectAll" resultType="com.lu.bean.User">
select * from t_user;
</select>
<select id="selectByUid" parameterType="int" resultType="com.lu.bean.User">
select * from t_user where uid=#{uid};
</select>
<insert id="add" parameterType="com.lu.bean.User">
insert into t_user(username,password,phone,address) values (#{username},#{password},#{phone},#{address});
</insert>
<delete id="delete" parameterType="int">
delete from t_user where uid=#{uid}
</delete>
<update id="update" parameterType="com.lu.bean.User">
update t_user set username=#{username},password=#{password},phone=#{phone},address=#{address} where uid=#{uid};
</update>
<select id="selectLike" parameterType="string" resultType="com.lu.bean.User">
select * from t_user where username like concat('%',#{name},'%')
</select>
</mapper>
注意: id:方法名
resultType/parameterType:返回结果类型
这里要注意的是用#{}包裹起来的参数是从Emp存在的属性。
4.最后创建一个MyBatis测试类,具体解释在代码注释里
package com.lu.test;
import com.lu.bean.User;
import com.lu.dao.UserDao;
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.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Scanner;
public class UserTest {
InputStream stream = null;
SqlSessionFactoryBuilder builder = null;
SqlSessionFactory factory = null;
SqlSession sqlSession = null;
UserDao userDao = null;
//代码之前运行
@Before
public void init() throws IOException {
//1.加载核心配置文件的字节输入流
stream = Resources.getResourceAsStream("mybatis.xml");
//2.创建SqlSessionFactory的构建对象--框架使用的是构建者模式
builder = new SqlSessionFactoryBuilder();
//3.通过构建对象加载配置文件的输入流获取SqlSessionFactory
factory = builder.build(stream);
//4.通过工厂对象获取SqlSession对象----执行JDBC操作的
sqlSession = factory.openSession();
//5.通过SqlSession对象获取接口对应的代理对象
userDao = sqlSession.getMapper(UserDao.class);
System.out.println("開始操作");
}
//查询
@Test
public void testSelectAll() throws IOException {
List<User> userList = userDao.selectAll();
for (User user : userList) {
System.out.println(user);
}
}
//单查
@Test
public void testSelectByUid() throws IOException {
User user=userDao.selectByUid(2);
System.out.println(user);
}
//添加
@Test
public void testAdd() throws IOException {
User user = new User();
user.setUsername("mybatis");
user.setPassword("666");
user.setPhone("119");
user.setAddress("github");
int n = userDao.add(user);
}
//修改
@Test
public void textUpdate() throws IOException {
User user=userDao.selectByUid(20);
int id= user.getUid();
User user1 = new User();
user1.setUid(id);
user1.setUsername("ddd");
user1.setPassword("888");
user1.setPhone("152348565");
user1.setAddress("南阳");
int i= userDao.update(user1);
}
//删除
@Test
public void testDelete() throws IOException {
int n=userDao.delete(19);
if (n>0){
System.out.println("delete success");
}
}
//模糊查询
@Test
public void textSelectLike() throws IOException {
Scanner sc = new Scanner(System.in);
String name = sc.next( );
User user = userDao.selectLike(name);
System.out.println(user);
}
//代码之后运行
@After
public void distroy() throws IOException {
System.out.println("釋放成功");
sqlSession.commit();
//资源的释放
sqlSession.close();
stream.close();
}
}
结构图:
然后测试即可