美文网首页
Mybatis接口绑定、动态SQL

Mybatis接口绑定、动态SQL

作者: 青椒rose炒饭 | 来源:发表于2019-04-10 00:27 被阅读0次

主要内容,说清楚mybatis的配置,以及一个动态SQL例子,感兴趣的可以看官方帮助文档 (提取码:fz66)

为了方便说明问题我就按照mvc模式新建了两层,第一层实体类(pojo层),第二层是mapper(相当于dao层但是在mybatis框架中使用mapper命名).至于为什么是这个样子,可以去北京尚学堂下载视频慢慢学习,免费的.新建的是java项目,所有的jar包都需要自己导入,不然在编写代码的时候不会自动提示,还会报错.编写代码如果出现错误先检查是不是导错包了.

项目目录.png
代码 (提取码:y12x) 里面有详细的注释,jar文件也在里面lib目录下下载. 注意编写程序的时候先导包(右键jar->build path->add to build path),我就来说一说文件的顺序吧.
1,新建实体类,根据数据库,一张表一个实体类新建.只需要书写属性就行,其他都能使用工具自动生成。属性名和类型都需要和表对应,否则查询到结果赋值的时候会出现空值
package cn.edu.kmust.pojo;

public class Flower {
    private int id;
    private String name;
    private float price;
    private String production;
    //只需要编写上面的内容即可,参照数据库,一张表对应一个实体类.类名为表名首字母大写
    //属性几乎都为私有,这个是面向对象程序设计的思想
    //1,  生成get()   set()方法
    //          右键->source->Generate Getters and Setters->选择需要生产方法的属性->OK即可
    //2,  生产构造方法
    //          右键->Source->Generate Constructer using fields->全选属性/不全选->有参构造函数/无参构造函数
    //          建议都生成,没有无参在提取变量的时候如果是Flower类型会出错
    //3,生产toString方法,测试的时候比较好用
    //          右键->Source->Generate toString()->选择所有属性->ok         
    public Flower() {
        super();
    }
    @Override
    public String toString() {
        return "Flower [id=" + id + ", name=" + name + ", price=" + price + ",     production=" + production + "]";
    }
    public Flower(int id, String name, float price, String production) {
        super();
        this.id = id;
        this.name = name;
        this.price = price;
        this.production = production;
    }

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public float getPrice() {
        return price;
    }
    public void setPrice(float price) {
        this.price = price;
    }
    public String getProduction() {
        return production;
    }
    public void setProduction(String production) {
        this.production = production;
    }
}

2,编写数据访问控制层DAO层,但是在Mybatis框架中为mapper.
2.1,Mybatis配置文件(mybatis.xml),建在src目录下

<?xml version="1.0" encoding="UTF-8"?>

<!-- mybatis配置文件,需要新建在src目录下 -->
<!DOCTYPE configuration
 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 打开log4J日志,为了方便查看sql,配置这个mybatis就能加载log4j日志模块
    需要在src目录下新建一个log4j.properties文件
     -->
    <settings >
        <setting name="logImpl" value="LOG4J"/>
    </settings>
    <!-- typeAliases类型重命名,使用type(类型名称)+aliases(别名)  在设置函数返回值和结果类型的时候就不用加上包名也能识别  -->
    <typeAliases>
        <package name="cn.edu.kmust.pojo"/><!-- 类型所在的包,设置类型时直接使用类名 -->
    </typeAliases>
    <environments default="mysql">
    <!-- 设置使用id为mysql的环境配置 -->
        <environment id="mysql">
        <!-- 配置一个环境id为mysql -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 设置事物类型为JDBC的事物类型 -->
            <dataSource type="POOLED">
            <!-- 使用连接池 ,下面的配置名称不能变去其他的自己修改为自己的-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/ssm"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 加载接口和映射文件,必须放在同一个包里,且里面的xml文件的namespace为,包名+接口名 -->
    <mappers>
        <package name="cn.edu.kmust.mapper"/>
    </mappers>
</configuration>

2.2,映射文件(类名+Mapper.xml)FlowerMapper.xml. 里面的namespace属性必须是包名和接口的名字,两者需要在一个包下,包名必须以mapper结束.

<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  
  <mapper namespace="cn.edu.kmust.mapper.FlowerMapper"><!-- namespace=包名+定义的接口的名字,-->
    <select id="selAll" resultType="Flower" ><!-- 通过id调用 -->
        select * from flower
    </select>
    
    <select id="selByName" resultType="Flower" parameterType="map">
    <!-- 设置参数为map类型就能够多参数传递 -->
        select * from flower where 1=1
        <!-- 1=1是为了避免语法错误,如果没有语句就直接变成了where and 不符合sql语法 -->
         <if test="name != null">
         <!-- 如果参数不为空就将下面的语句接到1=1 后面,这里能够直接使用参数名是因为接口中用了param注解 -->
            and name = '${name}'<!-- 获取name参数的值加‘’拼接为字符串 -->
         </if> 
         <if test="id != 0">
            and id=${id}
         </if>
    </select>
  </mapper>

3.接下来就是日志文件log4j的配置文件 (log4j.properties 文件名必须是这个). log4j.rootLogger=ERROR, stdout(控制台的任务输出级别为ERROR才输出) log4j.logger.cn.edu.kmust.mapper=DEBUG(后面是包名,这个包下的级别大于等于DEBUG的都输出),其他的内容也无关紧要. 任务级别 INFO、DEBUG、WARN、ERROR、FATAL

log4j.rootLogger=ERROR, stdout

### Uncomment for MyBatis logging
log4j.logger.cn.edu.kmust.mapper=DEBUG

### Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c %L - %m%n

4,动态sql执行过程,基于Mybatis的动态sql还有很多内容,想看的可以去看,上面发的官方文档.


执行过程.png

有点生疏但是能看懂的同学,多照着代码敲几遍,就没有问题了.

推介一下北京尚学堂,因为它的教学视频可以免费下载,一起学习.

相关文章

网友评论

      本文标题:Mybatis接口绑定、动态SQL

      本文链接:https://www.haomeiwen.com/subject/whuwiqtx.html