KKB : mybatis 注解

搭建框架流程

导入pom中依赖的jar包,导入mybatis.xml,导入log4j配置文件,导入SQLSession工具

    <dependencies>
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.6</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.5</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.12</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.40</version>
        </dependency>
    </dependencies>
<?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>
    <!--给类起别名-->
    <typeAliases>
<!--        <typeAlias type="com.atshiyou.bean.Student" alias="stu"></typeAlias>-->
        <package name="com.atshiyou.bean"/>
    </typeAliases>
    <!--在配置环境之前,配置pagehelper的插件-->
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
    </plugins>
    <environments default="development2">
        <environment id="development2">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/express?useUnicode=true&amp;characterEncoding=utf-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <!--配置扫描添加注解的接口类-->
    <mappers>
        <mapper class="com.atshiyou.dao.StudentDao"></mapper>
    </mappers>
</configuration>
log4j.rootLogger=DEBUG, Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender 
log4j.appender.Console.layout=org.apache.log4j.PatternLayout 
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n 

log4j.logger.java.sql.ResultSet=INFO 
log4j.logger.org.apache=INFO 
log4j.logger.java.sql.Connection=DEBUG 
log4j.logger.java.sql.Statement=DEBUG 
log4j.logger.java.sql.PreparedStatement=DEBUG
package com.atshiyou.Util;

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.Reader;


public class SqlSessionUtil {
    // ThreadLocal管理SQLSession
    private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();
    private static SqlSessionFactory sqlSessionFactory;

    // 配置文件只加载一遍
    static{
        try {
            Reader reader = Resources.getResourceAsReader("mybatis.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader,"development2");
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    //打开session方法
    public static SqlSession getSession(){
        //类似于单例的模式,获取sqlsession对象
        SqlSession session = threadLocal.get();
        if(session==null){
            session = sqlSessionFactory.openSession();
            threadLocal.set(session);
        }
        return session;
    }

    //关闭session
    public static void closeSession(){
        SqlSession session = threadLocal.get();
        if(session!=null) {
            session.close();
            threadLocal.remove();//清除数据
        }
    }
}

在dao层编写SQL语句

package com.atshiyou.dao;

import com.atshiyou.bean.Student;
import org.apache.ibatis.annotations.*;

import java.util.List;
import java.util.Map;

public interface StudentDao {
    //增删改查
    @Insert("insert into student(stuname,stuage,gid) values (#{stuName},#{stuAge},#{gid})")
    @Options(useGeneratedKeys = true,keyProperty = "stuId") //获取新增数据的id
    public int insertStu(Student student);

    //删除
    @Delete("delete from student where stuid = #{sid}")
    public int delete(int sid);

    //修改
    @Update("update student set stuname=#{stuName},stuage=#{stuAge},gid=#{gid} where stuid=#{stuId}")
    public int updateStu(Student student);

    //查询
    @Select("select * from student")
    public List<Student> findAll();

    @Select("select count(*) from student")
    public int totalCount();
    //计算出ID的最大值,最小值,平均值

    @Select("select Max(stuid) max,Min(stuid) min,Avg(stuid) avg from student")
    public Map total2();




}

发现SQL语句写在 代码中显得代码乱,所以我们将SQL语句写在配置文件中

使用的注解替换成 ....Provider(type=?,method=?)

如果说是使用连表联查的SQL语句,还是需要借助配置文件

resultMap中定义的是映射的文件

需要在mybatis配置文件中,将二次扫描的mapper删去,不删除会出现错误,因为扫描mapper包的时候,已经将接口扫描进去了

Mapped Statements collection already contains value for com.atshiyou.dao.StudentDao2.getAllStu 

配置二级缓存

在接口上:

在方法上:

猜你喜欢

转载自blog.csdn.net/awodwde/article/details/113103069