目录
Mybatis概念
MyBatis 是一款优秀的持久层框架,用于简化 JDBC 开发。
持久层:
负责将数据到保存到数据库的那一层代码。
以后开发我们会将操作数据库的Java代码作为持久层。而Mybatis就是对jdbc代码进行了封装。
JavaEE三层架构:表现层、业务层、持久层
框架:
框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型。
在框架的基础之上构建软件编写更加高效、规范、通用、可扩展。
Mybatis的操作比Web的操作方法更简洁,代码量更少。和Web一样使用分层操作,今天先从简单的查询,根据id查询,新增和删除说起。
这是所需要的包,需要注意的是mydatis.xml文件要创建在src里面。
这是需要的架包
MYSQL代码
#判断存在即删除数据库
drop database if exists mydb;
#创建数据库
create database mydb;
#使用数据库
use mydb;
#创建数据表
create table emp(
eid int primary key AUTO_INCREMENT, #员工工号
ename varchar(20), #员工姓名
dept varchar(20), #员工部门
job varchar(20),#职位
sal double,#薪资
phone varchar(11),#电话
address varchar(100)#地址
);
#添加数据
insert into emp(ename,dept,job,sal,phone,address) values('张翠萍','测试部','测试工程
师',5800,'15821563548','郑州');
insert into emp(ename,dept,job,sal,phone,address) values('李耀菲','测试部','测试经
理',9800,'13658942168','许昌');
insert into emp(ename,dept,job,sal,phone,address) values('王长林','研发部','开发工程
师',8800,'13954865721','南阳');
insert into emp(ename,dept,job,sal,phone,address) values('陈清泰','研发部','开发经
理',14900,'13785463249','洛阳');
insert into emp(ename,dept,job,sal,phone,address) values('赵德保','运维部','运维工程
师',5200,'15785642139','信阳');
insert into emp(ename,dept,job,sal,phone,address) values('刘瑞琳','运维部','产品经
理',12600,'17956248563','商丘');
#查询所有数据
select * from emp;
设置构造方法在bean包的User里
package com.yi.bean;
public class User {
private Integer uid;
private String username;
private String password;
private String phone;
private String address;
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
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 String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"uid=" + uid +
", username='" + username + '\'' +
", password='" + password + '\'' +
", phone='" + phone + '\'' +
", address='" + address + '\'' +
'}';
}
}
访问数据库代码在dao包的UserDao里
注意: 因为使用myBatis框架后我们不需要再写连接数据库的具体代码,只需要写一个接口类,编写需要执行操作的方法名称,参数和返回值
package com.yi.dao;
import com.yi.bean.User;
import java.util.List;
public interface UserDao {
List<User> selectAllUser();
User selectByUid(int uid);
int addUser(User user);
int delUser(int uid);
int updateUser(User user);
}
但是需要配置与UserDao相关联的UserDao.xml文件
在UserDao.xml中编写主要的sql代码
<?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是映射的dao接口-->
<mapper namespace="com.man.dao.UserDao">
<select id="selectAllUser" resultType="com.man.bean.User">
select *
from t_user;
</select>
<select id="selectByUid" parameterType="int" resultType="com.man.bean.User">
select *
from t_user
where uid = #{uid};
</select>
<insert id="addUser" parameterType="com.man.bean.User">
insert into t_user(username, password, phone, address)
values (#{username}, #{password}, #{phone}, #{address});
</insert>
<delete id="delUser" parameterType="int">
delete
from t_user
where uid = #{uid};
</delete>
<update id="updateUser" parameterType="com.man.bean.User">
update t_user
set username = #{username},
password = #{password},
phone = #{phone},
address = #{address}
where uid = #{uid};
</update>
</mapper>
用batis方法进行测试
package com.yi.Test;
import com.yi.ben.User;
import com.yi.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;
public class TestAll {
InputStream stream=null;
SqlSessionFactoryBuilder builder=null;
SqlSessionFactory factory=null;
SqlSession sqlSession=null;
UserDao userDao=null;
@Before
public void init() throws IOException {
stream= Resources.getResourceAsStream("mabatis.xml");
builder=new SqlSessionFactoryBuilder();
factory=builder.build(stream);
sqlSession=factory.openSession();
userDao=sqlSession.getMapper(UserDao.class);
}
//全查
@Test
public void testSelectAll(){
List<User> userList=userDao.selectAll();
System.out.println(userList);
for (User user : userList) {
System.out.println(user);
}
}
//添加
@Test
public void addAll(){
User user=new User();
user.setUsername("一场零");
user.setPassword("666");
user.setPhone("1378542352");
user.setAddress("信阳");
int i= userDao.add(user);
if (i>0){
System.out.println("添加成功");
}
}
//删除
@Test
public void deleteAll(){
int n=userDao.delete(7);
if (n>0){
System.out.println("删除成功");
}
}
@Test
//根据id进行单查
public void testSelectByUid(){
User user=userDao.selectByUid(2);
System.out.println(user);
}
//修改
@Test
public void update(){
User user= new User(2,"美美","666","123456789","郑州");
int n= userDao.reviseUser(user);
if (n>0){
System.out.println("修改成功");
}
}
//模糊查询
@Test
public void testSeach(){
List<User> userList=userDao.seach("三");
for (User user : userList) {
System.out.println(user);
}
}
@After
public void distroy() throws IOException {
sqlSession.commit();
sqlSession.close();
stream.close();
}
}
首先把常用的方法提取出来
InputStream stream = null;
SqlSessionFactoryBuilder builder = null;
SqlSessionFactory factory = null;
SqlSession sqlSession = null;
UserDao userDao = null;
连接jdbc和关闭资源都是重复操作我们可以也把他们提出来用 @Before(首先运行此方法)和 @After(最后运行此方法)。
@Before
public void init() throws IOException {
//1.加载核心配置文件的字节输入流
stream = Resources.getResourceAsStream("mydatis.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);
}
@After
public void distroy() throws IOException {
//资源的释放
sqlSession.commit();
sqlSession.close();
stream.close();
}
接下来就是查询,根据id查询,新增,删除。
@Test
//全查
public void testSelectAll() throws IOException {
//6.通过代理对象执行查询方法
List<User> userList = userDao.selectAll();
//7.遍历集合
for (User user : userList) {
System.out.println(user);
}
}
@Test
//根据id查询
public void testSelectByUid() throws IOException{
User user = userDao.selectByUid(1);
System.out.println(user);
}
@Test
//添加
public void testAdd() throws IOException {
User user = new User();
user.setUsername("mydatis");
user.setPassword("666");
user.setPhone("110");
user.setAddress("github");
int n = userDao.add(user);
if (n > 0) {
System.out.println("add success");
}
}
@Test
//删除
public void tesDelete(){
int n = userDao.delete(4);
if (n>0){
System.out.println("delete success");
}
}