实现sql查、增、删、改

  1. 准确查询(单个)

主函数为单个查询语句,查询函数为selectOne,通过主键值进行查询,下面是查找主键值为1的用户数据的代码

public void findUserByIdTest() throws IOException {

        String resource = "SqlMapConfig.xml";
        //得到配置文件流
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //创建会话工厂
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //通过工厂得到SQLSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //通过sqlsession操作数据库
        User user = sqlSession.selectOne("test.findUserById",1);
        System.out.println(user);
        sqlSession.close();
}

对应的map映射文件主要语句如下

<select id="findUserById" parameterType="int" resultType="cn.lyw.mybatis.po.User">
        SELECT * FROM USER WHERE id = #{id}
</select>

parameterType是指定输入参数的类型
resultType是指定输出结果的类型

#{}表示一个占位符,作为接收输入参数,类型可以是简单类型,pojo、hashmap。当接收pojo对象值时,通过OGNL读取对象中的属性值,通过属性.属性.属性…的方式获取对象属性值。

另外 表 示 一 个 拼 接 符 号 , 会 引 用 s q l 注 入 , 所 以 不 建 议 使 用 {}表示一个拼接符号,会引用sql注入,所以不建议使用 sql使{},接收输入参数,类型可以是简单类型,pojo、hashmap。如果接收简单类型,${}中只能携程value,当接收pojo对象值时,通过OGNL读取对象中的属性值,通过属性.属性.属性…的方式获取对象属性值。

  1. 模糊查询(可能多个)
    主函数为模糊查询,查询多条数据,查询函数为selectList,通过模糊查询name字段中包含“xiao”的用户数据
public void findUserByNameTest() throws IOException {
        String resource = "SqlMapConfig.xml";
        //得到配置文件流
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //创建会话工厂
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //通过工厂得到SQLSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //通过sqlsession操作数据库
        List<User> list = sqlSession.selectList("test.findUserByName","%xiao%");
        System.out.println(list);
        sqlSession.close();
}

对应的map映射文件主要语句如下

<select id="findUserByName" parameterType="java.lang.String" resultType="cn.lyw.mybatis.po.User">
        <!--   SELECT * FROM USER WHERE name LIKE '%${value}%'  -->
        SELECT * FROM USER WHERE name LIKE #{value}
        <!-- 上面两种方式功能一样,第一种就是在配置文件加了%,第二种要在前面的Java select语句中加%-->
</select>

上面代码所示,进行模糊查询时,like后面接的% 可以放在映射文件中,也可以放在主代码中,不可重复出现,最终是要实现下面查询语句

 SELECT * FROM USER WHERE name LIKE '%xiao%'
  1. 插入用户信息
    主要通过user表单设置各个字段的值,并通过insert函数插入刚才设置的值,插入后主键id值会自动加1
public void insertUserTest() throws IOException {
        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.setName("lining");
        user.setBirthday(new Date());
        user.setSex("男");
        user.setAddress("河南");
        //通过sqlsession操作数据库
        sqlSession.insert("test.insertUser",user);
        sqlSession.commit();
        sqlSession.close();
}

对应的map映射文件主要语句如下

<insert id="insertUser" parameterType="cn.lyw.mybatis.po.User">
        insert into user(id,name,birthday,sex,address) value(#{id},#{name},#{birthday},#{sex},#{address})
</insert>
  1. 删除用户信息
    这里根据用户的主键值来确定被删除的用户信息
public void deleteUserTest() throws IOException {
        String resource = "SqlMapConfig.xml";
        //得到配置文件流
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //创建会话工厂
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //通过工厂得到SQLSession
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //通过sqlsession操作数据库
        sqlSession.delete("test.deleteUser",6);
        sqlSession.commit();
        sqlSession.close();
}

对应的map映射文件主要语句如下

<delete id="deleteUser" parameterType="int">
        delete from user where id=#{id}
</delete>
  1. 更新用户信息
    通过主键值,来确定要被更新的用户
public void updateUserTest() throws IOException {
        String resource = "SqlMapConfig.xml";
        //得到配置文件流
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //创建会话工厂
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //通过工厂得到SQLSession
        SqlSession sqlSession = sqlSessionFactory.openSession();

        User user = new User();
        //必须设置id
        user.setId(5);
        user.setName("litang");
        user.setAddress("菏泽");
        //map配置成这样的话update user set name=#{name},address=#{address} where id=#{id},其他字段不会更新
        //map配置成这样的话update user set name=#{name},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}
        //其他字段会被默认更新为空
        //通过sqlsession操作数据库
        sqlSession.update("test.updateUser",user);
        sqlSession.commit();
        sqlSession.close();
}

更新用户 ,需要传入用户id以及用户的更新信息,所以parameterType应该是用户表单,#{id}:从输入user对象中获取id属性值,对应的map映射文件主要语句如下

<update id="updateUser" parameterType="cn.lyw.mybatis.po.User">
        update user set name=#{name},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}
</update>

另外补充的一点的是,在更新的过程中,我们可以对一个用户的信息进行完整的更新(主键值是无法更新的),也可以对部分信息进行更新,当更新的时候,映射文件中的字段和主函数中的set方法一一对应时获得完整添加的字段,如果映射文件中出现的字段没有在主函数中出现,会默认被更新null。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值