模糊查询的两种方法
- 编写sql语句
- 方法读取sql,参数,返回值类型,转成jdbc代码
Mybatis操作-使用注意事项
- parameterType和resultType
parameterType:指定输入参数类型
,mybatis通过ognl从输入对象中获取参数值拼接在sql中。
resultType:指定输出结果类型
,mybatis将sql查询结果的一行记录数据映射为resultType指定类型的对象。如果有多条数据,则分别进行映射,并把对象放到容器List中
注意
parameterType一般可以省略不写
resultType是必须要写的 - selectOne和selectList
selectOne查询一条记录,如果使用selectOne查询多条记录则抛出异常:
org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 3
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:70)
selectList可以查询一条或多条记录 (推荐)。也可以用来查询一条记录,不会抛出异常。 - Mybatis默认不会提交事务,所以如果是增删改,则需要手动提交事务,调用session
插入数据操作
编写sql执行映射文件中的sql
public void test02SaveUser(){
SqlSession sqlSession = MySessionUtils.getSession();
User user = new User();
user.setUsername("yy");
user.setSex(1);
user.setBirthday(new Date());
user.setAddress("河北");
sqlSession.insert("com.wxx.bean.User.saveUser",user);
sqlSession.commit();
sqlSession.close();
}
编写映射文件
<insert id="saveUser" parameterType="com.wxx.bean.User">
insert into `user` values(null,#{username},#{birthday},#{sex},#{address})
</insert>
修改用户信息操作
- 在映射文件中编写sql
- 设置参数与返回值
- 调用方法
public void test02UpdateUser(){
SqlSession sqlSession = MySessionUtils.getSession();
User user = new User();
user.setId(10);
user.setUsername("张三");
user.setBirthday(new Date());
user.setSex(1);
user.setAddress("上海市");
sqlSession.update("com.wxx.bean.User.updateUser",user);
sqlSession.commit();
sqlSession.close();
}
配置文件
<update id="updateUser" parameterType="com.wxx.bean.User">
update `user` set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}
</update>
Mybatis操作-小结
- 数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库连接池可解决此问题。
解决:在SqlMapConfig.xml中配置数据连接池,使用连接池管理数据库链接。 - Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。
解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。 - 向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。
解决:Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。 - 对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。
解决:Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型。 - 其中需要配置的文件包括:
1:maven pom.xml
2:核心配置文件Config.xml
3:映射文件 Mapper.xml
4:MySessionUtil
在开发过程中,需要不断地在xml中写标签与sql,调session,调用完成之后,关闭session。