MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
github地址:Releases · mybatis/mybatis-3 · GitHubMyBatis SQL mapper framework for Java. Contribute to mybatis/mybatis-3 development by creating an account on GitHub.https://github.com/mybatis/mybatis-3/releases
package com.qi.dao;
import com.qi.entity.User;
import com.qi.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class UserDaoTest {
@Test
public void test(){
//第一步获得SqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
//执行SQL 方式一getMapper
UserDao userDao = sqlSession.getMapper(UserDao.class);
List userList = userDao.getUserList();
for (User user : userList) {
System.out.println(user);
}
//关闭SqlSession
sqlSession.close();
}
}
七步
CRUD
1nameSpace
nameSpace里面的包名要与Dao/Mapper接口包名一致
Mapper
package com.qi.dao;
import com.qi.entity.User;
import java.util.List;
public interface UserMapper {
//获取全部用户
List getUserList();
//根据ID查询用户
User getUserById(int id);
//增加用户
int addUser(User user);
//修改事务
int updateUser(User user);
//删除一个用户
int deleteUser(int id);
}
Mapper.xml
Test
package com.qi.dao;
import com.qi.entity.User;
import com.qi.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import javax.jws.soap.SOAPBinding;
import java.util.List;
public class UserDaoTest {
@Test
public void test(){
//第一步获得SqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
try {
//执行SQL 方式一getMapper
UserMapper userDao = sqlSession.getMapper(UserMapper.class);
List userList = userDao.getUserList();
for (User user : userList) {
System.out.println(user);
}
}catch (Exception e){
e.printStackTrace();
}finally {
//关闭SqlSession
sqlSession.close();
}
}
@Test
public void getUserById(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User userById = mapper.getUserById(1);
System.out.println(userById);
sqlSession.close();
}
//增删改需要提交事务
@Test
public void addUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int res = mapper.addUser(new User(4, "爱的看哈", "123456"));
if (res>0){
System.out.println("success");
}
//提交事务
sqlSession.commit();
sqlSession.close();
}
@Test
public void updateUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.updateUser(new User(4,"安静","11111"));
sqlSession.commit();
sqlSession.close();
}
@Test
public void delectUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.deleteUser(4);
sqlSession.commit();
sqlSession.close();
}
}
Map
//map万能使用
int addUser2(Map map);
insert into mybatis.user(id,name,password)value (#{userid},#{username},#{passWord});
@Test
public void addUser2(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
HashMap map = new HashMap();
map.put("userid",7);
map.put("username","阿大赛");
map.put("passWord","713212313");
mapper.addUser2(map);
sqlSession.close();
}
}
配置解析
CRUD
package com.qi.dao;
import com.qi.entity.User;
import java.util.List;
import java.util.Map;
public interface UserMapper {
//模糊查询
List getUserLike(String value);
//获取全部用户
List getUserList();
//根据ID查询用户
User getUserById(int id);
//map万能使用
int addUser2(Map map);
//增加用户
int addUser(User user);
//修改事务
int updateUser(User user);
//删除一个用户
int deleteUser(int id);
}
select * from mybatis.user
select * from mybatis.user where id = #{id}
insert into mybatis.user(id,name,password)values (#{id},#{name},#{password});
update mybatis.user
set name = #{name},password = #{password}
where id = #{id};
insert into mybatis.user(id,name,password)values (#{userid},#{username},#{passWord});
delete from mybatis.user where id = #{id};
select * from mybatis.user where name like #{value}
package com.qi.dao;
import com.qi.entity.User;
import com.qi.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import javax.jws.soap.SOAPBinding;
import java.util.HashMap;
import java.util.List;
public class UserDaoTest {
@Test
public void test(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
try {
UserMapper userDao = sqlSession.getMapper(UserMapper.class);
List userList = userDao.getUserList();
for (User user : userList) {
System.out.println(user);
}
}catch (Exception e){
e.printStackTrace();
}finally {
sqlSession.close();
}
}
@Test
public void getUserById(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User userById = mapper.getUserById(1);
System.out.println(userById);
sqlSession.close();
}
@Test
public void addUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int res = mapper.addUser(new User(4, "爱的看哈", "123456"));
if (res>0){
System.out.println("success");
}
sqlSession.commit();
sqlSession.close();
}
@Test
public void updateUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.updateUser(new User(4,"安静","11111"));
sqlSession.commit();
sqlSession.close();
}
@Test
public void delectUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.deleteUser(4);
sqlSession.commit();
sqlSession.close();
}
@Test
public void addUser2(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
HashMap map = new HashMap();
map.put("userid",7);
map.put("username","阿大赛");
map.put("passWord","713212313");
mapper.addUser2(map);
sqlSession.close();
}
@Test
public void getUserLike(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List userList = mapper.getUserLike("%李%");
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
}
package com.qi.dao;
import com.qi.entity.User;
import org.apache.ibatis.annotations.*;
import java.util.List;
public interface UserMapper {
@Select("select * from mybatis.user")
List getUser();
//方法存在多个参数,所有参数前面必须加上注解@Param(“”)注解
@Select("select * from user where id = #{id}")
User getUserById(@Param("id") int id);
@Insert("insert into user(id,name,password) values (#{id},#{name},#{password})")
int addUser(User user);
@Update("update user set name=#{name},password=#{password} where id =#{id}")
int updateUser(User user);
@Delete("delete from user where id =#{id}")
int deleteUser(@Param("id") int id);
}
测试类
【注意我们必须将我们的接口绑定到核心配置文件中】
import com.qi.dao.UserMapper;
import com.qi.entity.User;
import com.qi.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class UserMapperTest {
@Test
public void test(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// List userList = mapper.getUser();
//
// for (User user : userList) {
// System.out.println(user);
//
// }
//
// User userById = mapper.getUserById(1);
// System.out.println(userById);
// mapper.addUser(new User(5,"理解啊的啦","211345"));
// mapper.updateUser(new User(5,"ss","214222"));
mapper.deleteUser(5);
sqlSession.close();
}
}
关于@Param()注解
lombok
org.projectlombok
lombok
1.18.20
@Data
@AllArgsConstructor
@NoArgsConstructor
多对一
SQl
CREATE TABLE `teacher`(
`id` INT(10) NOT NULL,
`name` VARCHAr(40) DEFAULT NULL,
PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
INSERT INTO teacher(`id`,`name`) VALUES (1,'杜老师');
CREATE TABLE `student`(
id INT(10) NOT NULL,
`name` VARCHAr(40) DEFAULT NULL,
`tid` INT(10) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fktid` (`tid`),
ConSTRAINT `fktid` FOREIGN KEY (`tid`) REFERENCES `teacher`(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO student(`id`,`name`,`tid`) VALUES (1,'小明',1);
INSERT INTO student(`id`,`name`,`tid`) VALUES (2,'小红',1);
INSERT INTO student(`id`,`name`,`tid`) VALUES (3,'小张',1);
INSERT INTO student(`id`,`name`,`tid`) VALUES (4,'小李',1);
INSERT INTO student(`id`,`name`,`tid`) VALUES (5,'小王',1);
环境搭建
1导入lombok
2新建实体类Teacher Student
3建立Mapper接口
4建立Mapper.xml文件
5在核心配置文件中绑定注册我们的Mapper接口或者文件
6测试查询是否能够成功
按照查询嵌套处理
select * from student;
select * from teacher where id = #{id};
按照结果嵌套处理
select s.id sid,s.name sname,t.name tname
from student s,teacher t
where s.tid = t.id;
一对多
一个老师对应多个学生
对于老师而言就是一对多的关系
package com.qi.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
private int id;
private String name;
//关联一个老师
private int tid;
}
package com.qi.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Teacher {
private int id;
private String name;
//一个老师多个学生
private List students;
}
按照结果嵌套处理
select s.id sid,s.name sanme,t.name tname,t.id tid
from student s,teacher t
where s.tid = t.id and t.id = #{tid};
按照查询嵌套处理
select * from mybatis.teacher where id = #{tid};
select * from student where tid =#{tid}
动态SQL
什么动态SQL,不同的需求不同的sql
if
choose (when, otherwise)
trim (where, set)
foreach
搭建环境
CREATE TABLE `blog`(
`id` VARCHAr(50) NOT NULL COMMENT '博客id',
`title` VARCHAr(100) NOT NULL COMMENT '博客标题',
`author` VARCHAr(100) NOT NULL COMMENT '博客作者',
`create_time` DATETIME NOT NULL COMMENT '创建时间',
`views` INT(30) NOT NULL COMMENT '浏览量'
)ENGINE=INNODB DEFAULT CHARSET=utf8
创建一个基础工程
package com.qi.entity;
import lombok.Data;
import java.util.Date;
@Data
public class Blog {
private int id;
private String title;
private String author;
private Date createTime;
private int views;
}
IF
select * from mybatis.blog where 1=1
and title =#{title}
and author = #{author}
choose (when, otherwise)
trim (where, set)
select * from mybatis.blog
and title =#{title}
and author = #{author}
update mybatis.blog
title = #{title},
author = #{author}
where id =#{id}