- 准确查询(单个)
主函数为单个查询语句,查询函数为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读取对象中的属性值,通过属性.属性.属性…的方式获取对象属性值。
- 模糊查询(可能多个)
主函数为模糊查询,查询多条数据,查询函数为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%'
- 插入用户信息
主要通过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>
- 删除用户信息
这里根据用户的主键值来确定被删除的用户信息
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>
- 更新用户信息
通过主键值,来确定要被更新的用户
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。