主要内容,说清楚mybatis的配置,以及一个动态SQL例子,感兴趣的可以看官方帮助文档 (提取码:fz66)
为了方便说明问题我就按照mvc模式新建了两层,第一层实体类(pojo层),第二层是mapper(相当于dao层但是在mybatis框架中使用mapper命名).至于为什么是这个样子,可以去北京尚学堂下载视频慢慢学习,免费的.新建的是java项目,所有的jar包都需要自己导入,不然在编写代码的时候不会自动提示,还会报错.编写代码如果出现错误先检查是不是导错包了.
代码 (提取码: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
有点生疏但是能看懂的同学,多照着代码敲几遍,就没有问题了.
推介一下北京尚学堂,因为它的教学视频可以免费下载,一起学习.
网友评论