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(选中接口)
image
2.点击Code,点击Generate
image
2.或者直接选中后使用快捷键Alt+Instert
3.设置一下测试用的版本,类名,需要测试的方法
image

测试类
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());
        }
    }
}
posted @ 2021-11-06 14:12  星河Sky  阅读(26)  评论(0)    收藏  举报