版权声明:本文为博主原创文章,非商用转载请注明出处: https://blog.csdn.net/qq_17058993/article/details/82458306
使用MyBatis,数据表基本的增删改查必须得搞明白。
一 、纯净MyBatis 的增删改查
参考博客:MyBatis的增删改查基本操作
1、main方法
注意:
① 每个方法单独测试,不然会报意外的错误。这里给注视掉了
② 增删改查操作完必须commit 不然没效果
sqlSession.commit();
public class MyBatisTest {
public static void main(String[] args) {
SqlSession sqlSession = null;
try {
//加载核心配置文件
InputStream is = Resources.getResourceAsStream("com/sample/mybatis-config.xml");
//创建sqlsession工厂 -->相当于connection
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//获取sqlsession -->相当于执行sql语句对象
sqlSession = sqlSessionFactory.openSession();
//执行sql
// Map<String, Object> map = sqlSession.selectList("com.sample.TUser.load");
// System.out.println("map:" + map);
//select----------------------
//单个查询
/*
TUser tUser = sqlSession.selectOne("queryUser", 1);
//多个
List<TUser> tUsers = sqlSession.selectList("queryUsers");
System.out.println("name:" + tUser.getName());
for (TUser user : tUsers) {
System.out.println(user.getId() + "------" + user.getName());
}
*/
//insert----------------------
//parameterType="com.sample.TUser"
// TUser tUser1 = new TUser();
// tUser1.setName("MH370");
//
// sqlSession.insert("insert_object", tUser1);
//parameterType="string"
// sqlSession.insert("insert_string", "小鱼人");
//delete---------------------
// sqlSession.delete("deleteByID", 16);
//update----------------------
TUser user = new TUser();
user.setName("王灵生");
user.setId(1);
sqlSession.update("update", user);
//增删改查必须commit
sqlSession.commit();
System.out.println("success");
} catch (IOException e) {
e.printStackTrace();
}finally {
if (sqlSession != null) {
sqlSession.close();
}
}
}
}
2、TestMapper.xml
mybatis-config.xml中有TestMapper.xml 的配置
注意:
① SQL语句中有多个参数时,必须使用 parameterType="com.sample.TUser" 实体类引用必须包含包名
如果有一个参数时,可以使用 parameterType="string" 类型随意更换
扫描二维码关注公众号,回复:
3693087 查看本文章
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTDMapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sample.TUser">
<!-- 根据ID查询一个结果,返回值类型为User对象 -->
<select id="queryUser" resultType="com.sample.TUser">
select * from T_user where id = #{id}
</select>
<!-- 查询多个结果,返回值类型为User对象 -->
<select id="queryUsers" resultType="com.sample.TUser">
select * from T_user where 1=1
</select>
<!--insert-->
<!-- 语句的id,传入的数据类型,语句类型为预编译语句,主键是id,由数据库处理主键值 -->
<insert id="insert_object" parameterType="com.sample.TUser" statementType="PREPARED" keyProperty="id"
useGeneratedKeys="true">
insert into T_user(name)
values (#{name});
</insert>
<!--只有一个参数 可以使用 多个参数只能使用object-->
<insert id="insert_string" parameterType="string" statementType="PREPARED" keyProperty="id"
useGeneratedKeys="true">
insert into T_user(name)
values (#{name});
</insert>
<!--delete-->
<delete id="deleteByObject" parameterType="com.sample.TUser">
delete from T_user
where id = #{id}
</delete>
<delete id="deleteByID" parameterType="int">
delete from T_user
where id = #{id}
</delete>
<!--update-->
<update id="update" parameterType="com.sample.TUser">
update T_user set name = #{name}
where id = #{id}
</update>
</mapper>
二、springboot整合MyBatis 增删改查
参考博客:SpringBoot整合Mybatis完成增删改查功能
springboot+MyBatis CRUD主要分为两个方法
- 注解: @Insert、@Select、@Update、@Delete
- xml文件配置
这里采用xml文件配置(感觉比注解更加简单 思路清晰)
参考博客: 注解和XML的区别,和优缺点
貌似官方推荐使用xml
文件目录:
1、SpringbootMybatisApplication
@MapperScan("com.weihao.springbootmybatis.mapper") //扫描mapper接口,这里不写,mapper文件夹下面的每个mapper都得添加 @Mapper注解 多了 很麻烦
@MapperScan("com.weihao.springbootmybatis.mapper") //扫描mapper接口,这里不写,mapper文件夹下面的每个mapper都得添加 @Mapper注解 多了 很麻烦
@SpringBootApplication
public class SpringbootMybatisApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootMybatisApplication.class, args);
}
}
2、UserMapper
@Repository
public interface UserMapper {
List<TUser> findUserByName(String name);
List<TUser> ListUser();
int insertUser(TUser tUser);
int deleteUser(int id);
int updateUser(TUser tUser);
}
3、UserService
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public List<TUser> fingByName(String name) {
return userMapper.findUserByName(name);
}
public List<TUser> ListUser() {
return userMapper.ListUser();
}
public int insertUser(TUser tUser) {
return userMapper.insertUser(tUser);
}
public int deleteUser(int id) {
return userMapper.deleteUser(id);
}
public int updateUser(TUser tUser) {
return userMapper.updateUser(tUser);
}
}
4、UserController
发现insertUser和updateUser的参数(实体类),请求的参数在后面跟上就可以了 后台自动解析
例如:http://localhost:8080/insertUser?name=麻花藤
@Controller
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/ListUserByName")
@ResponseBody
public List<TUser> ListUserByName(String name) {
return userService.fingByName(name);
}
@RequestMapping("/ListUser")
@ResponseBody
public List<TUser> ListUser() {
System.out.println("getUser");
List<TUser> list = userService.ListUser();
for (int i = 0; i < list.size(); i++) {
System.out.println("id:" + list.get(i).getId());
System.out.println("name:" + list.get(i).getName());
}
return userService.ListUser();
}
@RequestMapping("/insertUser")
@ResponseBody
public int insertUser(TUser tUser) {
return userService.insertUser(tUser);
}
@RequestMapping("/deleteUser")
@ResponseBody
public int deleteUser(int id) {
return userService.deleteUser(id);
}
@RequestMapping("/updateUser")
@ResponseBody
public int updateUser(TUser tUser) {
return userService.updateUser(tUser);
}
}
5、UserMapper.xml
mybatis中resultType和resultMap使用时的区别:
单表查询一般使用 resultType
多表联合查询,如果遇到字段相同的时候,一般使用resultMap 可以自定义 查询的结果列名称
参考博客:mybatis中resultType和resultMap使用时的区别
下面用了两个进行比较:
<?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" >
<mapper namespace="com.weihao.springbootmybatis.mapper.UserMapper">
<!--多表查询resultMap 可以修改java对象名字 多表字段相同的时候、单表查询resultType-->
<resultMap id="result" type="com.weihao.springbootmybatis.entity.TUser">
<result property="name" column="name"/>
</resultMap>
<select id="findUserByName" resultMap="result">
select * from T_user where name = #{name}
</select>
<!--单表查询resultType-->
<select id="ListUser" resultType="com.weihao.springbootmybatis.entity.TUser">
SELECT * FROM T_user where 1=1
</select>
<!--insert-->
<!-- 语句的id,传入的数据类型,语句类型为预编译语句,主键是id,由数据库处理主键值 -->
<insert id="insertUser" parameterType="com.weihao.springbootmybatis.entity.TUser" statementType="PREPARED" keyProperty="id" useGeneratedKeys="true">
insert into T_user(name)
values (#{name})
</insert>
<!--deleteUser-->
<delete id="deleteUser" parameterType="int">
delete from T_user where id = #{id}
</delete>
<!--updateUser-->
<update id="updateUser" parameterType="com.weihao.springbootmybatis.entity.TUser">
update T_user set name = #{name}
where id = #{id}
</update>
</mapper>
6、浏览器访问返回结果:
①查询
②增加
③删除
④修改