myBatis配置和测试(含模糊查询MAP)
myBatis配置和测试
SQL增删改需要提交事务commit
- 工具类 myBatisUtils
- 配置文件 ybatis-3-config.xml
- 返回类型 user
- 接口 UserDao
- sql绑定配置文件 userDao.xml
- 测试类 TEST
- maven过滤配置
可能会遇到的问题
- 配置文件没有注册
- 绑定接口错误。
- 方法名不对
- 返回类型不对
- Maven导出资源问题
模糊查询
1.Java代码执行的时候,传递通配符% %
List<user> userList = mapper.getuserLike("%李%");
select * from mybatis.user where name like #{value}
2.在sql拼接中使用通配符!
List<user> userList = mapper.getuserLike("李");
select * from mybatis.user where name like %"#{value}"%"
工具类
package utils;
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.IOException;
import java.io.InputStream;
/**
* @author liu
*/
public class myBatisUtils {
private static SqlSessionFactory sqlSessionFactory =null;
static {
//mybatis第一步,获取sqlSessionFactory对象
try {
String resource = "mybatis-config.xml";
InputStream ips = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(ips);
} catch (IOException e) {
e.printStackTrace();
}
}
//既然有了sqlSessionFactory,顾名思义,可以创造SqlSession的实例
//SqlSession完全包含了面向数据库的所有sql命令和方法
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
mybatis-3-config.xml
<?xml version="1.0" encoding="UTF8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=ture&useSSL=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--每一个Mappper.XML都需要在MyBatis核心配置文件中注册-->
<mappers>
<mapper resource="UserDao.xml"/>
</mappers>
</configuration>
方式一:通过路径绑定【推荐使用】
<mappers>
<mapper resource="com/shu/mapper/UserMapper.xml"/>
</mappers>
方式二:使用class文件绑定注册
注意点:
接口和他的Mapper配置文件必须同名
接口和他的Mapper配置文件必须在同一个包下
<mappers>
<mapper class="com.shu.mapper.UserMapper"/>
</mappers>
方式三:使用包扫描进行注入
注意点:
接口和他的Mapper配置文件必须同名
接口和他的Mapper配置文件必须在同一个包下
<mappers>
<package name="com.shu.mapper"/>
</mappers>
返回类型 user
package pojo;
public class User {
private int id;
private String name;
private String pwd;
public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", pwd='" + pwd + '\'' +
'}';
}
}
做一个接口提交sql
package dao;
import pojo.User;
import java.util.List;
import java.util.Map;
public interface UserDao {
//查所有用户
List<User> runSQL();
//查某个用户
List<User> SQLgetID(int id);
//查某个用户
List<User> SQLgetID2(Map<String,Object> map);
//insert一个用户
int addUser(User user);
//update修改用户
int updateUser(User user);
//如果对象参数很多,可以用万能的map去处理
int updateUser2(Map<String,Object> map);
//delete 删除用户
int deleteUser(int id);
}
userDao.xml
- Map传递参数,直接在sql中取出key即可!
- 对象传递参数,直接在sql中取对象的属性即可!
- 只有一个基本类型参数的情况下,可以直接在sql中取到!
SQL绑定接口和方法
注意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绑定接口,ID绑定方法-->
<mapper namespace="dao.UserDao">
<select id="runSQL" resultType="pojo.User">
select * from myBatis.user;
</select>
<select id="SQLgetID" resultType="pojo.User" parameterType="int">
select * from myBatis.user where id=#{id};
</select>
<select id="SQLgetID2" resultType="pojo.User" parameterType="map">
select * from myBatis.user where id=#{USERid} and name=#{USERname};
</select>
<!--对象中的属性可以取出来-->
<insert id="addUser" parameterType="pojo.User">
insert into myBatis.user(id,name,pwd) value(#{id},#{name},#{password})
</insert>
<!--对象中的属性可以取出来-->
<update id="updateUser" parameterType="pojo.User">
update myBatis.user set name=#{name},pwd=#{password} where id=#{id};
</update>
<!--用MAP传参代替user-->
<update id="updateUser2" parameterType="map">
update myBatis.user set name=#{USERname},pwd=#{USERpassword} where id=#{USERid};
</update>
<!--对象中的属性可以取出来-->
<delete id="deleteUser" parameterType="pojo.User">
delete from myBatis.user where id=#{id};
</delete>
</mapper>
测试
package dao;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import pojo.User;
import utils.myBatisUtils;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class daotest {
@Test
public void test01() {
//第一步:获得sqlSession对象
SqlSession sqlSession1 = myBatisUtils.getSqlSession();
//方式一:getMapper
UserDao mapper = sqlSession1.getMapper(UserDao.class);
List<User> userList = mapper.runSQL();
for (User user : userList) {
System.out.println(user);
}
//关闭sqlSession
sqlSession1.close();
}
@Test
public void testSelect() {
//第一步:获得sqlSession对象
SqlSession sqlSession2 = myBatisUtils.getSqlSession();
UserDao mapper = sqlSession2.getMapper(UserDao.class);
List<User> users = mapper.SQLgetID(2);
System.out.println(users);
//关闭sqlSession
sqlSession2.close();
}
@Test
public void testSelect2() {
//第一步:获得sqlSession对象
SqlSession sqlSession2 = myBatisUtils.getSqlSession();
UserDao mapper = sqlSession2.getMapper(UserDao.class);
Map<String, Object> map = new HashMap<>();
map.put("USERid",3);
map.put("USERname","ti");
List<User> users = mapper.SQLgetID2(map);
System.out.println(users);
//关闭sqlSession
sqlSession2.close();
}
@Test
public void testadd() {
//第一步:获得sqlSession对象
SqlSession sqlSession3 = myBatisUtils.getSqlSession();
UserDao mapper = sqlSession3.getMapper(UserDao.class);
int num = mapper.addUser(new User(5, "ttt", "654"));
if (num > 0) {
//增删改需要提交事务
sqlSession3.commit();
//关闭sqlSession
sqlSession3.close();
}
}
@Test
public void updateUser() {
//第一步:获得sqlSession对象
SqlSession sqlSession4 = myBatisUtils.getSqlSession();
UserDao mapper = sqlSession4.getMapper(UserDao.class);
int num = mapper.updateUser(new User(4, "ttt", "654321"));
if (num > 0) {
//增删改需要提交事务
sqlSession4.commit();
//关闭sqlSession
sqlSession4.close();
}
}
@Test
public void updateUser2() {
//第一步:获得sqlSession对象
SqlSession sqlSession4 = myBatisUtils.getSqlSession();
UserDao mapper = sqlSession4.getMapper(UserDao.class);
Map map = new HashMap<String, Object>();
map.put("USERpassword","1234567");
map.put("USERid",3);
int num = mapper.updateUser2(map);
if (num > 0) {
//增删改需要提交事务
sqlSession4.commit();
//关闭sqlSession
sqlSession4.close();
}
}
@Test
public void deleteUser() {
//第一步:获得sqlSession对象
SqlSession sqlSession5 = myBatisUtils.getSqlSession();
UserDao mapper = sqlSession5.getMapper(UserDao.class);
int num = mapper.deleteUser(4);
if (num > 0) {
//增删改需要提交事务
sqlSession5.commit();
//关闭sqlSession
sqlSession5.close();
}
}
}
maven会过滤,需要加上配置
<!--在build中配置resources,来防止我们资源导出失败的问题-->
<!-- <build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>-->
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构