20200101——mybatis第一天 接着上面复习

根据用户名称模糊查询
xml

    <select id="findUserByName" parameterType="string" resultType="cn.mmz.mybatis.pojo.User">
        select * from user where username like #{value}
    </select>

java

    public void finUserByNameTest()throws Exception{
        String resource = "SqlMapConfig.xml";
        //得到配置文件流
        InputStream inputStream =  Resources.getResourceAsStream(resource);
        //创建会话工厂,传入配置文件信息
        SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(inputStream);
        //通过工厂得到SqlSession
        SqlSession  sqlSession = sqlSessionFactory.openSession();
        List<User> list = sqlSession.selectList("test.findUserByName","小明");
        System.out.println(list);
        sqlSession.close();
    }

但是查询的结果
在这里插入图片描述
其实模糊查询,查询到的%小明%
所以要用 : s q l s q l 使 {}:表示拼接sql串,将接收到的参数的内容不加任何的修饰拼接在sql中 使用 {} 拼接sql,引起sql注入

接收输入参数的内容,如果传入类型是简单类型,${}只能用value

查询用户小结
parameterType:指定输入参数类型
resultType: 指定输出结果类型

#{}表示一个占位符
${}表示一个拼接符号,会引入sql注入,不建议使用

selectOne和selectList
前者是查询出一条
后者查询多条进行映射

**添加用户 **
映射文件:在User里面配置sql的statement

    <insert id="insertUser" parameterType="cn.mmz.mybatis.pojo.User">
        insert into user (id,username,birthday,sex,address) value (#{id},#{username},#{birthday},#{sex},#{address})
    </insert>

mybatis通过OGNL获取对象的值

程序代码

 @Test
    public void insertUserTest()throws Exception{
        String resource = "SqlMapConfig.xml";
        //得到配置文件流
        InputStream inputStream =  Resources.getResourceAsStream(resource);
        //创建会话工厂,传入配置文件信息
        SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(inputStream);
        //通过工厂得到SqlSession
        SqlSession  sqlSession = sqlSessionFactory.openSession();
        User user = new User();
        user.setUsername("马铭泽");
        user.setBirthday(new Date());
        user.setSex("1");
        user.setAddress("吉林长春");
        sqlSession.insert("test.insertUser",user);
        sqlSession.commit();
        sqlSession.close();
    }

获取用户信息主键
也成为主键的返回
mysql的自增主键:执行insert提交之前,自动生成一个主键
通过mysql函数获取到刚刚插入的自增主键
LAST_INSERT_ID() 在insert之后调用

        <selectKey keyProperty="id" order="AFTER"></selectKey>

只适用于自增组件

keyproperty将查询到的主键值设置到parameterType指定的对象的属性里面
order为执行顺序

还需要声明返回值类型int类型
然后就可以在控制台看到操作了

在这里插入图片描述
在这里插入图片描述

非自增主键返回

使用mysql uuid()的函数,就需要修改表中id的字段类型为string,长度设置为35位

执行思路:先查询uuid查询主键,将主键输入到sql语句中
要在之前

程序报错了。有两个点,第一是你如果使用uuid这种模式,必须要求id的字段类型为String,另一个是你在设置pojo对象的类型也要改成String。

删除用户

    <delete id="deleteUser" parameterType="int">
        delete from user where id = #{id}
    </delete>
 @Test
    public void deleteUserTest()throws Exception{
        String resource = "SqlMapConfig.xml";
        //得到配置文件流
        InputStream inputStream =  Resources.getResourceAsStream(resource);
        //创建会话工厂,传入配置文件信息
        SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(inputStream);
        //通过工厂得到SqlSession
        SqlSession  sqlSession = sqlSessionFactory.openSession();

        sqlSession.delete("test.deleteUser",39);
        sqlSession.commit();
        sqlSession.close();

    }

更新用户

<update id="updateUser" parameterType="cn.mmz.mybatis.pojo.User">
        update user set  username = #{username},birthday = #{birthday},sex = #{sex},address = #{address}
        where id = #{id}
    </update>
  @Test
    public void updateUserTest()throws Exception{
        String resource = "SqlMapConfig.xml";
        //得到配置文件流
        InputStream inputStream =  Resources.getResourceAsStream(resource);
        //创建会话工厂,传入配置文件信息
        SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(inputStream);
        //通过工厂得到SqlSession
        SqlSession  sqlSession = sqlSessionFactory.openSession();
        User user = new User();
        user.setId(35);
        user.setUsername("咕噜");
        user.setBirthday(new Date());
        user.setSex("1");
        user.setAddress("吉林长春");

        sqlSession.update("test.updateUser",user);
        sqlSession.commit();
        sqlSession.close();

    }
发布了657 篇原创文章 · 获赞 39 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_36344771/article/details/103791470