持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情
功能优化
下边实现insertUser功能的语句还可以进行优化
优化前:
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int result = mapper.insertUser();
优化后:
int result = sqlSession.insert("com.sentiment.mapper.UserMapper.insertUser");
log4j日志
依赖
<!-- log4j日志 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
log4j.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<param name="Encoding" value="UTF-8" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS}
%m (%F:%L) \n" />
</layout>
</appender>
<logger name="java.sql">
<level value="debug" />
</logger>
<logger name="org.apache.ibatis">
<level value="info" />
</logger>
<root>
<level value="debug" />
<appender-ref ref="STDOUT" />
</root>
</log4j:configuration>
配置好后运行,则会输出日志信息
日志的级别 FATAL(致命)>ERROR(错误)>WARN(警告)>INFO(信息)>DEBUG(调试)
从左往右日志信息越来越详细
增删改查
改
先写个工具类
package com.sentiment.utils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
public class SqlSeesionUtils {
public static SqlSession getSqlSession(){
SqlSession sqlSession;
try {
InputStream is=Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory build = sqlSessionFactoryBuilder.build(is);
sqlSession = build.openSession(true);
} catch (IOException e) {
throw new RuntimeException(e);
}
return sqlSession;
}
}
修改配置文件UserMapper.xml,加上update语法
<update id="updateUser">
update t_user set username='tana' where id=2;
</update>
接口类也实现一下对应的方法
public interface UserMapper {
int insertUser();
int updateUser();
}
之后定义个修改的方法testUpdate(),直接通过定义的工具类中获取SqlSeesion即可
public void testUpdate(){
SqlSession sqlSession = SqlSeesionUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int result = mapper.updateUser();
System.out.println(result);
sqlSession.close();
}
删
和上边同理
UserMapper.xml
<delete id="deleteUser">
delete from t_user where id=3;
</delete>
添加接口
int deleteUser();
最终实现
public void testDelete(){
SqlSession sqlSession = SqlSeesionUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int result = mapper.deleteUser();
System.out.println(result);
sqlSession.close();
}
查
接口
User getUserId();
List<User> getUserList();
UserMaaper.xml
<select id="getUserId" resultType="com.sentiment.pojo.User">
select * from t_user where id=1
</select>
<select id="getUserList" resultType="com.sentiment.pojo.User">
select * from t_user;
</select>
实现
@Test
public void testGetUserId(){
SqlSession sqlSession = SqlSeesionUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.getUserId();
System.out.println(user);
sqlSession.close();
}
@Test
public void testGetUserList(){
SqlSession sqlSession = SqlSeesionUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.getUserList();
userList.forEach(System.out::println);
}
注意:
1、查询的标签select必须设置属性resultType或resultMap,用于设置实体类和数据库表的映射关系 resultType:自动映射,用于属性名和表中字段名一致的情况 resultMap:自定义映射,用于一对多或多对一或字段名和属性名不一致的情况
2、当查询的数据为多条时,不能使用实体类作为返回值,只能使用集合,否则会抛出异常 TooManyResultsException;但是若查询的数据只有一条,可以使用实体类或集合作为返回值