Mybatis
mybatis官网
官网可以解决一些疑惑
一.建立实体类User
小问题:方法名与数据库名字不相同如何解决?
User实体类,定义属性;无参构造;有参构造;getset方法;toString
package ljg.com.pojo;
public class User {
private int userid;
private String username;
private String userpwd;
private int userage;
public User() {
}
public User(int userid, String username, String usepwd, int userage) {
this.userid = userid;
this.username = username;
this.userpwd = usepwd;
this.userage = userage;
}
public int getUserid() {
return userid;
}
public void setUserid(int userid) {
this.userid = userid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getUserpwd() {
return userpwd;
}
public void setUserpwd(String usepwd) {
this.userpwd = usepwd;
}
public int getUserage() {
return userage;
}
public void setUserage(int userage) {
this.userage = userage;
}
@Override
public String toString() {
return "User{" +
"userid=" + userid +
", username='" + username + '\'' +
", usepwd='" + userpwd + '\'' +
", userage=" + userage +
'}';
}
}
二:建立Mapper接口,用xml的形式去完成接口中定义的方法
定义接口方法
package ljg.com.mapper;
import ljg.com.pojo.User;
import java.util.List;
import java.util.Map;
public interface UserMapper {
//查询全部数据
List<User> getListAll();
//分页查询技术
List<User> getUserByLimt(Map<String, Integer> map);
//分页查询技术2 RowBounds 就是面向对象的分页技术
List<User> getUserByRowBounds(Map<String, Integer> map);
}
xml去实现接口中的方法
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--此路径要找到接口方法-->
<mapper namespace="ljg.com.mapper.UserMapper">
<select id="getListAll" resultType="user">
select id as userid,name as username,pwd as userpwd,age as userage from jxgl.user;
</select>
<!-- 解决字段名不一致-->
<resultMap id="mapabc" type="user">
<result property="userid" column="id"/>
<result property="username" column="name"/>
<result property="userpwd" column="pwd"/>
<result property="userage" column="age"/>
</resultMap>
<select id="getUserByLimt" parameterType="map" resultMap="mapabc">
select * from jxgl.user limit #{startIndex},#{pageSize}
</select>
<select id="getUserByRowBounds" resultMap="mapabc">
select * from jxgl.user
</select>
</mapper>
三.第三步: 创建unti层的工具类MybatisUntis ,封装工程创建SqlSession对象
工具类,封装工程,创建SqlSession
package ljg.com.utils;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MyBatisUtils {
//静态工厂
private static SqlSessionFactory sqlSessionFactory;
static {
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (Exception e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSession() {
return sqlSessionFactory.openSession();
}
}
四.在resources里创建mybatis-config.xml
mybatis配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 便于对数据库访问的,访问db.properties-->
<properties resource="db.properties"/>
<!-- 配日志工厂-->
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<!--给返回值取别名,个人测试不区分大小写,只要字母顺序一致即可-->
<typeAliases>
<typeAlias type="ljg.com.pojo.User" alias="user"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!-- 访问的是db.properties里的数据,注意value值和db.properties里面一一对应-->
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!-- 访问到方法-->
<mappers>
<package name="ljg.com.mapper"/>
</mappers>
</configuration>
配置属性文件,配置数据库信息
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/jxgl?serverTimezone=UTC
username=root
password=root
配置日志文件,可以在输出台输出,以及导出日志
### 配置根 ###
log4j.rootLogger = debug,console ,fileAppender
### 设置输出sql的级别,其中logger后面的内容全部为jar包中所包含的包名 ###
log4j.logger.org.apache=dubug
log4j.logger.java.sql.Connection=dubug
log4j.logger.java.sql.Statement=dubug
log4j.logger.java.sql.PreparedStatement=dubug
log4j.logger.java.sql.ResultSet=dubug
### 配置输出到控制台 ###
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{1}:%L - %m%n
### 配置输出到文件 ###
log4j.appender.fileAppender = org.apache.log4j.FileAppender
log4j.appender.fileAppender.File =D:/log/axis.log
log4j.appender.fileAppender.Append = true
log4j.appender.fileAppender.Threshold = DEBUG
log4j.appender.fileAppender.layout = org.apache.log4j.PatternLayout
log4j.appender.fileAppender.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### 配置输出到文件,并且每天都创建一个文件 ###
log4j.appender.dailyRollingFile = org.apache.log4j.DailyRollingFileAppender
### 日志导出的路径 ###
log4j.appender.dailyRollingFile.File = D:/log/axis.log
log4j.appender.dailyRollingFile.Append = true
log4j.appender.dailyRollingFile.Threshold = DEBUG
log4j.appender.dailyRollingFile.layout = org.apache.log4j.PatternLayout
log4j.appender.dailyRollingFile.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### 配置输出到文件,且大小到达指定尺寸的时候产生一个新的文件 ###
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLING_FILE.Threshold=ERROR
log4j.appender.ROLLING_FILE.File=D:/log/rolling.log
log4j.appender.ROLLING_FILE.Append=true
log4j.appender.ROLLING_FILE.MaxFileSize=10KB
log4j.appender.ROLLING_FILE.MaxBackupIndex=1
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
五.创建一个测试类
小技巧:
1.选中UserMapper(选中接口)

2.点击Code,点击Generate

2.或者直接选中后使用快捷键Alt+Instert
3.设置一下测试用的版本,类名,需要测试的方法

测试类
package ljg.com.test;
import ljg.com.mapper.UserMapper;
import ljg.com.pojo.User;
import ljg.com.utils.MyBatisUtils;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.junit.Assert.*;
public class UserMapperTest {
@Test
public void getListAll() {
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> list = userMapper.getListAll();
for (User user:list
) {
try {
System.out.println(user.toString());
} catch (Exception e) {
System.out.println("查无此人");
}
}
}
@Test
public void getUserByLimt() {
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper userMappermapper = sqlSession.getMapper(UserMapper.class);
Map<String, Integer> map=new HashMap<String, Integer>();
map.put("startIndex",0);
map.put("pageSize",3);
List<User> list = userMappermapper.getUserByLimt(map);
for (User user:list
) {
System.out.println(user.toString());
}
}
@Test
public void getUserByRowBoundsTest(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
//1
RowBounds rowBounds = new RowBounds(0, 4);
List<User> list =
sqlSession.selectList("ljg.com.mapper.UserMapper.getUserByRowBounds", null, rowBounds);
for (User user:list
) {
System.out.println(user.toString());
}
}
}

浙公网安备 33010602011771号