本文将会简单介绍MyBatis框架,如何与数据库连接,但是像是生成随机id,动态sql语句,我会放在进阶论述。
还有SpringMvc的JSR拦截器我会在本文详细叙述。
目录
一、MyBatis框架简述
程序员需要写sql保证灵活,优化方便,而MyBatis不是一个完全的ORM,且适用于灵活多变的互联网金融类型项目。
下面来简单说一下ORM框架的特点:
- 将对关系模型(通过sql操作数据库)的操作转化成对对象模型(通过引用.方法)的操作(说人话,就是不用写sql语句)
- 有类属性和表字段的一一映射关系(类属性和表字段必须一一对应,最好相同,不然要写手动映射,这个进阶篇再说)。
而MyBatis框架不满足第一点,所以称它为一个不完全的ORM框架,与之对应的是hiberante框架,这个就是完全的ORM框架,适用于中小型项目。
二、MyBatis项目配置
首先声明本项目是在Maven框架的基础上创建的:
- 首先去Pom.xml配置jar包:
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.0</version>
</dependency>
<!--日志包 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.0.8</version>
</dependency>
<!-- 字节码包 -->
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.17.1-GA</version>
</dependency>
</dependencies>
再去src/main/resources配置mybatis.xml文件:
但要注意两点:
(1). 和spring整合后environments配置将废除,但在里面的连接信息依旧在配置。
(2). 映射文件说简单点就是数据传输层的对关系模型的操作文件(自行体会哈,这部分人话我还真不会说),需要在连接数据库后,对映射文件进行加载,下面我也会详细介绍映射文件,以及各种加载方式:
<?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>
<!-- 加载属性文件 -->
<properties resource="db.properties"></properties>
<!-- 和spring整合后 environments配置将废除-->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理,事务控制由mybatis-->
<transactionManager type="JDBC" />
<!-- 数据库连接池,由mybatis管理-->
<dataSource type="POOLED">
<property name="driver" value="${mysql.driver}" />
<property name="url" value="${mysql.url}" />
<property name="username" value="${mysql.user}" />
<property name="password" value="${mysql.pwd}" />
</dataSource>
</environment>
</environments>
<!--加载映射文件-->
<mappers>
<!-- 当的映射文件的加载 -->
<mapper resource="com/it/bean/student.xml"/>
</mappers>
</configuration>
- 同级目录下创建db.properties,主要用于填写与数据库相关的连接信息(当然这些信息可以在mybatis.xml文件里写,在properties写property即可),但是性能就会变差,具体代码如下:
(PS:默认用的是JDBC连接哈)
mysql.driver=com.mysql.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/test
mysql.user=root
mysql.pwd=123456
- 再在同级目录下创建log4j.properties文件,主要用来配置日志信息的。具体配置代码如下:
#For JBoss: Avoid to setup Log4J outside $JBOSS_HOME/server/default/deploy/log4j.xml!
#For all other servers: Comment out the Log4J listener in web.xml to activate Log4J.
log4j.rootLogger=debug, stdout, logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=c\:\\aa\\my.log
log4j.appender.logfile.MaxFileSize=1MB
#Keep three backup files.
log4j.appender.logfile.MaxBackupIndex=3
#Pattern to output: date priority [category] - message
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
- 创建dto或者bean对象就自然不用说了,总之要和数据库字段栏一一对应。
三、Mybatis映射文件介绍
- 创建Mybatis映射文件
映射文件就是一个内部封装了sql语句的,对数据库对应表进行增删改查的xml文件,正如上面所说,它是对关系模型的操作文件。
下面我会把该文件从上到下的规范信息详细叙述一遍:
1. mapper标签
mapper标签是包裹对某个表的增删改查操作,namespace就是填对应接口类的地址的属性
<mapper namespace="com.it.mapper......"></mapper>
2. 增删改查操作
增删改查操作都是由一个个标签包裹起来的,而且标签具有相同的的属性,如下:
(1). id:这个可以看做成具体调用sql语句的方法名,在其他类可以通过命名对象的方法调用这个方法。
(2). parameterType:这属性被称为传入参数:可以看成方法形参的输入类型。
(3). resultType:此属性被称为传出参数,可看成方法的输出类型。
然后就是不同类型的sql语句所对应的标签:
- 增加是
<select></select>
, - 删除是
<delete></delete>
, - 修改是
<upload></upload>
, - 删除是
<delete></delete>
但要注意:这些标签本质都是statement
其他我就不多说了,放在Mybatis进阶里说了
3. Mybatis属性加载顺序:
Mybatis属性加载顺序得按照这个来,不然就会报错
- 首先在properties元素体内定义的属性首先被读取。
- 然后读取properties元素中resource或url加载的属性,他会覆盖已读取的同名属性。
- 最后再读取parameterType传递的属性,它会覆盖已读取的同名属性。
- 总结:
详细执行顺序:
properties(属性),settings(二级缓存),typeAliases(起别名),typeHandlers,objectFactory,objectwrapperFactory,plugins,environments,databaseIdProvider,mappers
四、SrpingMvc的JSR拦截器设置
拦截器的作用是为了防止有人直接输入网址且没通过登陆界面访问。
SpringMvc自带的中央处理器会拦截静态资源,这个我在上篇已经叙述过了,有需要的可以去瞅瞅,具体地址如下:
在第三章第一节就有说
但要注意的是:
JSP拦截器和Fliter过滤器的区别是,拦截器主要拦截的是请求,而过滤器过滤的是页面
1.相关配置
(1). JSR380所需要的Jar包:
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.0.0.GA</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.3.2.Final</version>
</dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.4.Final</version>
</dependency>
(2). 验证所需的注解:
直接在bean或者dto对象设置需要验证的属性上写对应注解即可,注解如下:
注解 | 注解验证含义 |
---|---|
@Null | 验证对象是否为null |
@NotNull | 验证对象是否不为null, 无法查检长度为0的字符串 |
@NotBlank | 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格. |
@NotEmpty | 检查约束元素是否为NULL或者是EMPTY. |
-------- | ----- |
Booelan检查 | |
@AssertTrue | 验证 Boolean 对象是否为 true |
@AssertFalse | 验证 Boolean 对象是否为 false |
-------- | ----- |
长度检查 | |
@Size(min=, max=) | 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内 |
@Length(min=, max=) | Validates that the annotated string is between min and max included. |
-------- | ----- |
日期检查 | |
@Past | 验证 Date 和 Calendar 对象是否在当前时间之前 |
@Future | 验证 Date 和 Calendar 对象是否在当前时间之后 |
@Pattern | 验证 String 对象是否符合正则表达式的规则 |
-------- | ----- |
数值检查 | 建议使用在Stirng,Integer类型,不建议使用在int类型上,因为表单值为“”时无法转换为int,但可以转换为Stirng为"",Integer为null |
@Min | 验证 Number 和 String 对象是否大等于指定的值 |
@Max | 验证 Number 和 String 对象是否小等于指定的值 |
@DecimalMax | 被标注的值必须不大于约束中指定的最大值. 这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示.小数存在精度 |
@DecimalMin | 被标注的值必须不小于约束中指定的最小值. 这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示.小数存在精度 |
@Digits | 验证 Number 和 String 的构成是否合法 |
@Digits(integer=,fraction=) | 验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。 |
@Range(min=, max=) | 检查数字是否介于min和max之间. |
@Range(min=10000,max=50000,message=“range.bean.wage”) | private BigDecimal wage; |
剩下还有一些Mybatis的基础操作,我会放在以后的Mybatis进阶论述清楚的,今天就到这了吧,大家晚安~