MyBatis入门(2)-简单的增删改查

1. 对于普通增删改查中,各种标签的使用

接口中的所有方法:

public interface UserDao {
    public List<User> getuserList();
    public User getUserid(String mname);
    public int InsertUser(User user);
    public int upadateUser(User user);
    public int deleteUser(int id);
}
  1. 首先创建Dao层接口的实现类(现在用一个xml配置文件代替)中,<mapper>标签的namespace属性,必须要对应完整的接口路径;
  2. 然后再<mapper>标签中就有一些sql相关的语句;
  3. 比如查询的时候,使用的就是select标签;其中的id就是指接口的方法名,resultType就是指返回类型;paramterType是指参数类型;如下简单事例:
<mapper namespace="dxs.dao.UserDao">
    <!--里面的id就是指方法名;resultType是指返回类型,还可以添加一个parameterType作为参数类型;-->
    <select id="getuserList" resultType="dxs.pojo.User" >
        select * from testmybatis
    </select>
</mapper>

  1. 当插入的时候,使用的是<insert>标签,
    <insert id="InsertUser" parameterType="dxs.pojo.User">
        insert into test.testmybatis(id,Mname,sex,age) value(#{id},#{Mname},#{sex},#{age})
    </insert>

测试类:

    @Test
    public void test2(){
        SqlSession sqlSession = null;
        try {
            //先获取一个sqlsession对象;
            sqlSession = MybatisUtils.getSqlSession();
            //通过getMapper方法获得接口的对象,然后通过这个对象调用方法;
            UserDao userDao = sqlSession.getMapper(UserDao.class);
            int num = userDao.InsertUser(new User(3,"玉皇大帝","男",10));
            //增删改时需要提交事物;
            sqlSession.commit();
            System.out.println(num);
        } finally {
            //最后将连接关闭;
            sqlSession.close();
        }
    }

  1. 再修改数据时,使用<update>标签
    <update id="upadateUser" parameterType="dxs.pojo.User">
        update testmybatis set Mname=#{Mname},age=#{age} where id=#{id}
    </update>

测试类:

  @Test
    public void test3(){
        SqlSession sqlSession = null;
        try {
            //先获取一个sqlsession对象;
            sqlSession = MybatisUtils.getSqlSession();
            //通过getMapper方法获得接口的对象,然后通过这个对象调用方法;
            UserDao userDao = sqlSession.getMapper(UserDao.class);
            int num = userDao.upadateUser(new User(3,"二郎神","男",764));
            //增删改时需要提交事物;
            sqlSession.commit();
            System.out.println(num);
        } finally {
            //最后将流关闭;
            sqlSession.close();
        }
    }

  1. 删除使用的标签是<delete>,里面的属性大都是一样的;
    <delete id="deleteUser" parameterType="int">
        delete from testmybatis where id=#{id}
    </delete>

测试类:

    @Test
    public void test4(){
        SqlSession sqlSession = null;
        try {
            //先获取一个sqlsession对象;
            sqlSession = MybatisUtils.getSqlSession();
            //通过getMapper方法获得接口的对象,然后通过这个对象调用方法;
            UserDao userDao = sqlSession.getMapper(UserDao.class);
            int num = userDao.deleteUser(2);
            //增删改时需要提交事物;
            sqlSession.commit();
            System.out.println(num);
        } finally {
            //最后将流关闭;
            sqlSession.close();
        }
    }

2. 通过Map传输数据

之所以通过Map来传递数据,是有好处的,首先,使用Map传输数据的时候,是键值对,这样传值的时候,mapper.xml(用来实现dao接口的配置文件,专门书写sql语句)里面的sql语句的值就可以直接使用map的键进行书写,不需要刻意的全部相同,毕竟你创建的实体类是和数据库的表相对应的,所有类的属性和表的字段相同;
下面是基本的使用:

先创建一个接口,在接口中设计好方法,然后创建一个配置文件,继承这个方法,并写入sql语句和类型;
配置方法:

    <insert id="addMapUser" parameterType="map">
        insert into testmybatis(Mname,sex,age) value (#{thisName},#{thisSex},#{thisAge})
    </insert>

测试类:

    @Test
    public void test5(){
        SqlSession sqlSession=null;
        try {
            sqlSession = MybatisUtils.getSqlSession();
            UserDao mapper = sqlSession.getMapper(UserDao.class);
            //后面需要用到Map对象,所以这里可以先创建一个对象;
            //之所以第二个参数是Object类型,是因为这样的话就可以将所有的类型传入,不需要固定在单一的类型;
            Map<String,Object> map = new HashMap<>();
            map.put("thisName", "嫦娥");
            map.put("thisSex", "女");
            map.put("thisAge", 1322);
            int num = mapper.addMapUser(map);
            //千万要记得提交事物,除了查不需要,其他的如果不提交,就和没运行一样;
            sqlSession.commit();
            //返回执行之后的MySQL中受到影响行数;
            System.out.println(num);
        } finally {
            //最后也不要忘了关闭;
            sqlSession.close();
        }
    }

3. 在Mybatis中的模糊查询

SQL注入就是指输入一些非法的参数,然后获取一些不应该获取的数据;
一般情况下,在MyBatis中,所有的输入参数都是可以规定类型的,这样其实就可以规避sql注入;

那么如果需要输入一些通配符的时候该怎么办的?如下:
下面以模糊 查询作为事例;步骤都是一样的:
第一步:在一个接口中定义模糊查询的方法;

   public List<User> getUserLike(String value);

第二步:在一个配置xml文件中通过select标签书写sql语句;id的值就是之前定义的方法;定义resultType为自己需要的类型;像是%这样的通配符最好是直接固定的写出来;

    <select id="getUserLike" resultType="dxs.pojo.User">
        select * from testmybatis where Mname like "%"#{value}"%"
    </select>

第三步:进行测试,看是否可以查询到数据;

    @Test
    public void test6(){
        SqlSession sqlSession=null;
        try {
            sqlSession = MybatisUtils.getSqlSession();
            UserDao mapper = sqlSession.getMapper(UserDao.class);
            List<User> user = mapper.getUserLike("后");
            for (User u:user){
                System.out.println(u);
            }
        } finally {
            //最后也不要忘了关闭;
            sqlSession.close();
        }
    }

测试的结果是没有错的;可以查询到含有这个字的字段全部信息;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神秘的天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值