Spring Boot(五):MyBatis 增删改查

版权声明:本文为博主原创文章,非商用转载请注明出处: 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、浏览器访问返回结果:

①查询

②增加

③删除

④修改 

猜你喜欢

转载自blog.csdn.net/qq_17058993/article/details/82458306