(1)在pom.xml中引用mybatis和SQL的jar包和要用到的jar包
com.wk
mybatis05
1.0-SNAPSHOT
mysql
mysql-connector-java
8.0.28
junit
junit
4.12
test
log4j
log4j
1.2.17
org.projectlombok
lombok
1.18.24
org.mybatis
mybatis
3.4.6
(2)创建mybatis的配置文件----复制粘贴即可
有些地方需要根据自己的情况进行修改
(3)如果没有数据库和表,进行创建。有的话可以直接及进行连接
(4) 创建实体类 :类名与数据库表名保持一致。
(5) 创建mybatis和数据库的映射文件.---- 复制粘贴
作用: 映射实体和表之间的映射关系。
注意:==把映射文件注册到配置文件上== mybatis.xml上
(5)
(6)
作用:它可以帮你生成实体类的get和set方法 而且可以帮你生成构造方法。重写toString方法
(2)、pom.xml中引入lombok依赖
(3)在实体类上添加lombok注解。
@Data //set和get方法以及toString方法
@NoArgsConstructor //无参构造方法
@AllArgsConstructor //所有参数的构造方法
insert into tb_user(username,realname) values(#{username},#{realname})
delete from tb_user where userid=#{id}
update tb_user set username=#{username},realname=#{realname} where userid=#{userid}
测试
package com.test;
import com.ykq.entity.User;
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.Reader;
import java.util.List;
public class Test01 {
//查询所有
@Test
public void testFindAll()throws Exception{
Reader reader = Resources.getResourceAsReader("mybatis.xml");
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(reader);
SqlSession session=factory.openSession();
List users = session.selectList("namespace起的名字.findAll");
System.out.println(users);
session.commit();//必须提交
session.close();
}
//修改
@Test
public void testUpdate()throws Exception{
Reader reader = Resources.getResourceAsReader("mybatis.xml");
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(reader);
SqlSession session=factory.openSession();
User user=new User(8,"lm","we");
int row = session.update("", user);
System.out.println(row);
session.commit();//必须提交
session.close();
}
//删除
@Test
public void testDelete()throws Exception{
Reader reader = Resources.getResourceAsReader("mybatis.xml");
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(reader);
SqlSession session=factory.openSession();
int row = session.delete("", 1);
System.out.println(row);
session.commit();//必须提交
session.close();
}
//测试添加
@Test
public void testAdd() throws Exception{
Reader reader = Resources.getResourceAsReader("mybatis.xml");
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(reader);
SqlSession session=factory.openSession();
User user=new User();
// user.setUsername("lmtb");
// user.setRealname("xx");
int row = session.insert("", user);
System.out.println(row);
session.commit();//必须提交
session.close();
}
}
(1)mybatis.xml配置文件
(2)添加sql的日志--mybatis.xml配置文件
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
(1)创建一个dao接口并定义自己需要的方法。
public interface ###Dao {
/**
* 查询所有
* @return
*/
public List<###> findAll();
}
(2)创建映射文件
注意: namespace必须和dao接口一样,而且标签的id必须和你接口的方法名一样。
(3)测试
@Test
public void testFindAll()throws Exception{
Reader reader = Resources.getResourceAsReader("mybatis.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session =factory.openSession();
//获取相应接口的代理对象
StudentDao studentDao = session.getMapper(StudentDao.class);
List list = studentDao.findAll();
System.out.println(list);
session.close();
}
在dao接口中某些方法可能需要传递多个参数,例如:查询单条信息的限制条件
不加@param进行注解报的错误
需要返回添加数据库后的id值。
insert into tb_user values(null,#{username},#{realname})
列名和属性名不一致时, 查询的结果是null,或者某个列没有值
可以有两种解决办法:
(1) 为查询的列起别名,而别名和属性名一致。
列名和属性名不一致时, 查询的结果是null,或者某个列没有值
可以有两种解决办法:
(1) 为查询的列起别名,而别名和属性名一致。
(2)使用resultMap完成列和属性之间的映射关系。
动态sql:根据参数的值,判断sql的条件。
mybatis中动态sql标签:
(1)创建一个dao接口并定义自己需要的方法。
public interface ###Dao {
/**
* 查询所有
* @return
*/
public List<###> findAll();
}
(2)创建映射文件
注意: namespace必须和dao接口一样,而且标签的id必须和你接口的方法名一样。
(3)测试
@Test
public void testFindAll()throws Exception{
Reader reader = Resources.getResourceAsReader("mybatis.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session =factory.openSession();
//获取相应接口的代理对象
StudentDao studentDao = session.getMapper(StudentDao.class);
List list = studentDao.findAll();
System.out.println(list);
session.close();
}
在dao接口中某些方法可能需要传递多个参数,例如:查询单条信息的限制条件
不加@param进行注解报的错误
需要返回添加数据库后的id值。
insert into tb_user values(null,#{username},#{realname})
列名和属性名不一致时, 查询的结果是null,或者某个列没有值
可以有两种解决办法:
(1) 为查询的列起别名,而别名和属性名一致。
(2)使用resultMap完成列和属性之间的映射关系。
动态sql:根据参数的值,判断sql的条件。
mybatis中动态sql标签:
choose标签在有一个条件满足时,就跳出,不在往下进行判断。
作用:可以自动为你添加where关键字,并且可以帮你去除第一个and |or
这个配合if标签一起用,一般用在修改语句。如果传递的参数值为null,那么应该不修改该列的值。
update account
name=#{name},
money=#{money},
isdeleted=#{isdeleted},
where id=#{id}
循环标签.
查询:
删除:
#{id}
添加:
insert into account(name,isdeleted) values
(#{acc.name},#{acc.isdeleted})
(1)使用字符串函数 完成拼接 concat
(2) 使用${}
使用流程:
(1)引入pageHelper的jar包
com.github.pagehelper
pagehelper
5.1.11
(2)mybatis中设置pageHelper的拦截器
(3)使用pageHelper
@Test
public void testFindAll() throws Exception{
Reader reader = Resources.getResourceAsReader("mybatis.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = factory.openSession();
StudentDao studentDao = session.getMapper(StudentDao.class);
// 设置分页属性pageNum:显示第几页 PageSize:每页显示的条数
PageHelper.startPage(1,1);
//把查询的结果封装到PageInfo类中。
List list = studentDao.findAll();
PageInfo pageInfo = new PageInfo(list);
System.out.println(pageInfo.getPages());
System.out.println(list);
session.close();
}
注意:在这一步要把相关实体类实现可序列化
否则会报错:
解决方法:
作用: 根据表帮你生成实体类,和dao和xml映射文件。就是简单的CRUD
使用流程:
(1)引入mybatis-generator的依赖jar包
org.mybatis.generator
mybatis-generator-core
1.4.0
(2)generator的配置文件
(3)运行你的配置文件
在测试类里进行运行即可
@Test
public void test0001()throws Exception{
List warnings = new ArrayList();
boolean overwrite = true;
File configFile = new File("geneator.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
}
缓存是存在于==内存中==的临时数据
使用缓存的好处:使用缓存减少和数据库的交互次数,提高执行效率。
mybatis支持两种缓存
(1)一级缓存----基于SqlSession级别的缓存。默认一级缓存是开启的,不能关闭。
(2)二级缓存--基于SqlSessionFactory级别的缓存,它可以做到多个SqlSession共享数据。默认它是关闭。需要手动开启。