此文档以哔哩哔哩up主黎曼的猜想发表的SSM框架合集为基础总结讲述idea下如何利用mybatis实现用户查询操作,此处记录,以便后续查阅复习总结之。
视频链接为:https://www.bilibili.com/video/BV1mE411X7yp?p=24
注:此文档以https://blog.csdn.net/qq_58156653/article/details/119302292(mybatis入门环境搭建,test测试控制台输出数据库信息)为基础
全部代码如下:
package dao;
import domin.User;
import java.util.List;
public interface Iuserdao {
/**
* 查询所有用户
*/
List findAll();
//保存用户方法
void saveUser(User user);
//更新用户方法
void updateUser(User user);
//删除用户方法
void deleteUser(User user);
//查询用户
User findById(User user);
}
注:使用id查询的话这里也可以写为parameterType="int"
注:使用select标签,id中的值为方法名称,user中为实体中User的属性。values代表所操作的数据。
sql语句使用#{}字符:它代表占位符,相当于原来jdbc中的?,都是用于执行语句时替换实际的数据。具体的数据是由#{}中的内容所决定的。
#{}中内容的写法:由于我们保存方法的参数是一个User对象,此处要写User对象中属性的名称,它使用的是oqnl表达式。
所谓的oqnl表达式是oqnl官方提供的一种表达式语言,它按照一定的语法格式来获取数据,即#{对象.对象}
例如#{user.username}它会先找user对象,然后在user对象中找到username属性,并调用getUsername()方法取值,若在parameterType中指明了实体类名称,例如parameterType="domin.User",则不再需要写user,可以直接写username,即#{对象}
全部代码如下:
select last_insert_id();
insert into user(username,address,sex,birthday)values(#{username},#{address},#{sex},#{birthday});
update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} where id=#{id}
delete from user where id=#{id} address=#{address}
全部代码如下:
import dao.Iuserdao;
import domin.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.After;
import org.junit.Before;
import java.io.InputStream;
import java.util.List;
public class Test {
private InputStream in;
private SqlSession sqlSession;
private Iuserdao userdao;
@Before//在测试方法执行之前执行
public void init()throws Exception{
in= Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
sqlSession=factory.openSession();
userdao=sqlSession.getMapper(Iuserdao.class);
}
@After//用于在测试方法执行之后执行
public void destroy()throws Exception{
//释放资源
sqlSession.close();
in.close();
}
@org.junit.Test
public void testFindAll() {
List users=userdao.findAll();
for(User user:users){
System.out.println(user);
}
}
// 测试方法
//测试保存操作
@org.junit.Test
public void testSave(){
User user=new User();
user.setUsername("dfggfhd");
user.setAddress("啊啊啊啊啊啊啊啊啊");
user.setSex("fgg阿尔法hj");
user.setBirthday("19由dcfd阮fdg经天7");
//执行保存方法
userdao.saveUser(user);
//提交事务
sqlSession.commit();
}
// 测试方法
//测试更新操作
@org.junit.Test
public void testUpdate(){
User user=new User();
user.setId(10);
user.setUsername("老王");
user.setAddress("北京");
user.setSex("男");
user.setBirthday("2001-02-17");
//执行保存方法
userdao.updateUser(user);
//提交事务
sqlSession.commit();
}
// 测试方法
//测试删除操作
@org.junit.Test
public void testDelete(){
User user=new User();
// user.setId(48);
// user.setAddress("星际监狱");
user.setId(72);
userdao.deleteUser(user);
//提交事务
sqlSession.commit();
}
// 测试方法
//测试根据id查询操作
@org.junit.Test
public void testfindOne(){
User user=new User();
user.setId(11);
if(userdao.findById(user)==null){
System.out.println("---查无此人---");
}
else {
System.out.println("---查询成功---");
System.out.println(user);
System.out.println("------------");
}
//提交事务
sqlSession.commit();
}
}
//import domin.User;
//import dao.Iuserdao;
//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 java.io.InputStream;
//import java.util.List;
//
mybatis入门案例
//public class Test {
// public static void main(String[] args) throws Exception{
1.读取配置文件
// InputStream in= Resources.getResourceAsStream("SqlMapConfig.xml");
2.创建SqlSessionFactory工厂
// SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
// SqlSessionFactory factory=builder.build(in);
3.使用工厂生产SqlSession对象
// SqlSession session=factory.openSession();
4.使用SqlSession创建Dao接口的代理对象
// Iuserdao userDao=session.getMapper(Iuserdao.class);
5.使用代理对象执行方法
// List users=userDao.findAll();
// for(User user:users){
// System.out.println(user);
// }
6.释放资源
// session.close();
// in.close();
// }
//}
查看控制台发现打印成功
注:此时把查询到的数据封装在列表中
注:此时使用like实现模糊查询
注:此时使用%通配符实现模糊查询
注:此时把查询到的数据封装在列表中
控制台打印成功
1.使用resultType : 主要针对于从数据库中提取相应的数据出来
2.使用parameterType :主要针对于将信息存入到数据库中,如:insert 增加数据到数据库中, Update更新等
3.在MyBatis中,我们通过parameterType完成输入映射(指将值映射到sql语句的占位符中,值的类型与dao层响应方法的参数类型一致),通过resultType完成输出映射(从数据库中输出,通过dao层的方法查询到的数据输出到pojo对象中)。 注意输入与输出都是相对于数据库的
4.parameterType:指定输入参数类型,mybatis获取参数值拼接在sql中。
5.resultType:指定输出结果类型,mybatis将sql查询结果的一行记录数据映射为resultType指定类型的对象。如果有多条数据,则分别进行映射,并把对象放到容器List中
6.parameterType写在前面 ,resultType写在后面
一般而言,更新和删除只写parameterType
查询既要写parameterType也要写resultType且顺序必须是parameterType写在前面 ,resultType写在后面
增加比较特殊
在对应的映射配置Iuserdao.xml中配置查询方法的映射,也可以使用if标签以及where标签实现多条件查询
例如:
也可以写为:
实现查询出多个值,实现 select * from user where id in(1,2,3,4)效果
在对应的映射配置Iuserdao.xml中配置查询方法的映射
代码如下:
collection:代表要遍历的集合元素,注意不能写#{}
open:代表语句的开始部分
close:代表语句的结束部分
item:代表遍历集合的 每个元素,生成的变量名
sperator:代表分隔符