MyBatis - 基础学习2 - CRUD

1.namespace中的包名要和接口包名一致(namespace在xml文件中,接口包名,就是xml的实例化对象)

2.resultType:返回的参数类型(如果返回值是int,可以不用写)

3.parameterType:传入参数或对象类型

我们在配置好了项目的核心配置文件以后(mybatis-config.xml),以及编写好了我们的工具类(MybatisUtils)

完成了这些操作,我们的mybtis程序就只用写三步就可以操作数据库了

第一步:编写接口在我们的Dao包中

public interface UserMapper {
    //编写查询接口
    List<User> getUserList();
    //编写插入接口
    int insertuser(User user);
    //编写修改数据库记录接口
    int update(User user);
    //编写删除接口
    int delete(int id);
}

 

第二步:编写sql语句,在mapper.xml中

<?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接口-->
<mapper namespace="top.lostyou.dao.UserMapper">
    <!--编写查询的sql代码  id=“那个方法可以使用这个sql” resultType=“返回值类型”-->
<select id="getUserList" resultType="top.lostyou.pojo.User">
    SELECT * from mybatis.user WHERE id=3
</select>
    <!--编写插入的sql语句,parameterType=“传入参数或对象的数据类型”-->
    <!--对象中的属性可以直接取出来,使用  #{}  取值-->
<insert id="insertuser" parameterType="top.lostyou.pojo.User">
    INSERT INTO mybatis.user(id, name, pwd) VALUE(#{id},#{name},#{pwd})
</insert>
    <!--编写修改的sql语句-->
    <update id="update" parameterType="top.lostyou.pojo.User">
        update mybatis.user set name=#{name},pwd=#{pwd} where id=#{id}
    </update>
    <!--编写删除的sql语句-->
    <delete id="delete" parameterType="int">
        DELETE FROM mybatis.user WHERE id=#{id}
    </delete>
</mapper>

 

第三步:测试

public class UserDaoTest {
    @Test
    public void test(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //第一种执行sql方式:getMapper
        try {
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = mapper.getUserList();
        for (User user : userList) {
            System.out.println(user);
        }}catch (Exception e){
            System.out.println("出错了");
            e.fillInStackTrace();
        }finally {
            //关闭sqlsession
            sqlSession.close();
        }
    }
    //增删改都需要提交事务在mybatis中
    @Test
    public void testinsert(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int key = mapper.insertuser(new User(6,"马明","123789"));
        System.out.println("插入成功!"+key);
        sqlSession.commit();
        sqlSession.close();
    }
    @Test
    public void testupdate(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int key = mapper.update(new User(4, "maming", "654321"));
        if (key>0)
        {
            System.out.println("修改成功!");
        }
        sqlSession.commit();
        sqlSession.close();
    }
    @Test
    public void testdelete(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int key = mapper.delete(6);
        if(key>0)
        {
            System.out.println("删除成功!");
        }
        sqlSession.commit();
        sqlSession.close();
    }
}

 

二.强大的Map

  • Map传参,直接在sql中取出key
  • 对象传参,直接在sql中取对象的属性即可
  • 只有一个基本类型,可以直接在sql语句中拿到

相比与对象传参,map传参的优势在于它可以自定义传入的数据个数是多少,

如果是利用对象传参,我们使用查询语句时,where后面跟着的条件如果只需一个id,但是对象传参,必须要把其它的参数全部传入,相比于利用效率,非常的低

而map传参的自定义程度高,条件需要几个参数就可以只传入几个参数,提高代码的利用效率

三步举例map传参:

第一步:创建一个接口,但是传入参数是键值对

 User getuser(Map<String,Object> map);

 

第二步:编写sql语句,此时的传入对象类型就可以直接写map(parameterType="map"),然后调用的方法会自动去找到我们map.put的值

    <select id="getuser" resultType="top.lostyou.pojo.User" parameterType="map">
        SELECT * from mybatis.user WHERE id=#{hhh}
    </select>

 

第三步:测试,并且put健值对的值

 @Test
    public void testgetuser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("hhh",2);//与xml的sql语句中的,key名字对应,然后设置值
        User user = mapper.getuser(map);
        System.out.println(user);
        sqlSession.close();
    }

 

三.mybatis中的模糊查询的拓展

mybatis中也有 sql注入的问题,我们在使用LIKE这类关键字的时候,我们应该在xml中把这句sql写死,让用户可操作的,传入的只能是一个变量

以下是一种实现方式:

<select id="getuser" resultType="top.lostyou.pojo.User" parameterType="map">
        SELECT * from mybatis.user where name LIKE "%"#{name}"%"
    </select>

 

它的解决思路是把通配符写到了sql语句中,而不是在实现类中

 

posted @ 2022-11-15 17:52  回忆也交给时间  阅读(22)  评论(0编辑  收藏  举报