Jackson使用构造函数进行序列化
默认
调用POJO的无参构造函数,构造一个java对象
为每一个成员变量调用setter进行赋值。
默认情况下,使用Jackson做反序列化时,必须有public无参构造函数,必须有成员变量的set方法。
@JsonCreator注解加在构造方法上使用@JsonProperty("json字段名")定义构造函数的参数。
1234567891011public class User { private String name; private int age; @JsonCreator public User(@JsonProperty("name") String name, @JsonProperty("age") Integer age) { this.name = name; this.age = age; } //getter}
加在工厂静态方法上1234567@JsonCreatorpublic static ...
按汉语拼音排序
默认以ASCII排序
可将编码转为GBK后排序,GBK为拼音排序
1SELECT * FROM T ORDER BY CONVERT(column_name USING GBK);
Mapper配置文件-参数映射
单个参数
使用parameterType指定参数类型
使用#{paramName}表示参数值
也可指定参数的类型等属性(同result,以逗号分隔):#{paramName, jdbcType=类型}
多个参数以根据用户名(username)和密码(password)查询该用户为例
User(id, username, password),别名为user
使用map
将参数定义为Map类型(parameterType="map")SQL中使用#{key}表示value
编写代码时并不会提示需要哪些key,很少使用
示例-接口1getUser(Map<String, Object>);
示例-mapper123456<select id="getUser" parameterType="map" resultType="user"> select id, username, password from use ...
Mapper配置文件-cache
功能用于配置二级缓存
属性
默认值
说明
其他
eviction
LRU
策略_1
flushInterval
不自动刷新(仅在调用增删改时刷新)
自动刷新间隔毫秒数
size
1024
缓存内可存放多少元素
readOnly
false
是否只读
只读对象更快,返回缓存应用;非只读时返回拷贝对象
策略
策略
说明
其他
LRU
最近最少使用
移除最长时间不被使用的记录
FIFO
先进先出
移除最早缓存的记录
SOFT
软引用
基于GC和软引用规则移除
WEAK
弱引用
更积极地基于GC和软引用规则移除
Mapper配置文件-sql
功能可定义需重复使用的SQL片段。在其他语句中使用include引入
示例
可以传入变量
1234567891011<sql id="tableColumns"> ${table}.id, ${table}.username</sql><select id="selectUser" resultType="User"> select <include refid="tableColumns"> <property name="table" value="user"/> </include> from user where username=#{username}</select>
也可以嵌套引用
123456789101112131415< ...
SqlSessionFactoryBuilder
功能读取配置,生成SqlSessionFactory
生命周期一次性的,只是用来创建SqlSessionFactory,创建成功后即可销毁,不应长期存在
使用方法参见: https://mybatis.org/mybatis-3/zh/java-api.html#SqlSessionFactoryBuilder
1SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(配置);
配置文件方式1build(config,String environment, properties)
参数
必选
类型
说明
config
√
InputStream | Reade
可由Resources.getResourceAsStream(文件路径)创建
environment
String
配置文件中的environment的id,默认使用environments的default值
properties
Properties
键值对,可覆盖配置文件中的同名设置。可用于配置文件无法设置的值(如密码的加 ...
日志
功能通过日志可以更清楚的了解内部执行情况,如输出SQL语句,参数值等
配置启用日志在congiguration.settings下添加setting
1<setting name="logImpl" value="日志实现"/>
可选的value为:SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING
设置日志实现常用的是Log4J2和logbacklogback的具体配置可参见 https://www.cnblogs.com/jirglt/archive/2012/10/19/2731456.html
logback示例123456789101112<?xml version="1.0" encoding="UTF-8"?><configuration> <appender name="STDOUT" class=&quo ...
tomcat 静态页面(html)中文乱码
问题tomcat 中jsp不会乱码 但是html中文会乱
解决方法
html页面设置编码为 utf-8
配置tomcat的server.xml
123456<!--添加 URIEncoding=“UTF-8”--><Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" /><Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>
设置catalina中jvm的编码编辑catalina.bat
1set "JAVA_OPTS= ...
Restful传参时,最后一个参数小数点后面数据丢失
问题重现1@RequestMapping(value = "/email/exist/{email:.+}")
获取到的email丢失邮箱小数点之后的内容
如mwernher6@columbia.edu只能获取到mwernher6@columbia
原因see:https://carlzone.blog.csdn.net/article/details/71791673
Spring将最后url一个.视为Mapping中的通配符。将带有点的路径视为/email/exist/{email}.*
解决办法
在最后添加:.+
如/email/exist/{email:.+}
或使带有点的参数不作为最后一个参数
如/email/exist/{email}/{others}
延迟加载
功能默认一次性加载所有数据,当有级联操作时,将一次性把所有级联的数据查询
开启延迟加载后,只有在读取该级联记录或某个属性,才会再次查询该记录
开启在MyBatis核心配置settings中设置
12<setting name="lazyLoadingEnabled" value="true"/><setting name="aggressiveLazyLoading" value="false"/>
属性
说明
默认值
其他
lazyLoadingEnabled
懒加载全局开关
false
aggressiveLazyLoading
是否将该对象全部加载
false
false:只加载需要的属性true:加载整个对象
其他settings为全局配置,但也可以在级联语句中自定义懒加载
association和collection有fetchType属性,eager为立即加载,lazy为懒加载