mybatis的配置文件详解(二)
一.properties
这些属性都是可外部配置且可动态替换的,既可以在典型的 Java 属性文件中配置,亦可通过 properties 元素的子元素来传递。例如
1)
<?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"/>
<typeAliases>
<package name="com.shsxt.po"></package>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<package name="com.shsxt.mapper"/>
<!--<mapper resource="com.shsxt.mapper.UserMapper"></mapper>-->
</mappers>
</configuration>
这种方法是将数据源的属性放在db.properties中,然后在mybatis中读取property的value值,需要在<configuration>中配置一个properties的属性,<properties resource="db.properties"/>
db.properties的内容如下:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis02?useSSL=false
username=root
password=
2)直接将属性的value值写死在mybaties.xml
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
二,typeAliases
有三种方式配置typeAliases,第一种方式是手动配置别名,第二种方式是通过注解,第三种方式是通过扫描包(推荐使用该方式)
在configuration标签中添加如下标签,
<typeAliases>
<typeAlias type="com.shsxt.po.User alise="user"/>
</typeAliases>
通过包扫描的方式配置别名
<typeAliases>
<package name="com.shsxt.po" >
<typeAliases> 3,注解的方式配置别名
暂时不用 三,typeHandles类型处理器
无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时, 都会用类型处理器将获取的值以合适的方式转换成 Java类型。
下表描述了一些默认的类型处理器。
四,环境配置
MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者共享相同 Schema 的多个生产数据库, 想使用相同的 SQL 映射。许多类似的用例。不过要记住:尽管可以配置多个环境,每个 不过要记住:尽管可以配置多个环境,每个SqlSessionFactory 实例只能选 实例只能选择其一。所以,如果你想连接两个数据库,就需要创建两个 SqlSessionFactory 实例,每个数据库对应一个。而如果是三个数据库,就需要三个实例,依此类推,记起来很简单:
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
<environment id="test">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver2}"/>
<property name="url" value="${url2}"/>
<property name="username" value="${username2}"/>
<property name="password" value="${password2}"/>
</dataSource>
</environment>
</environments>
db.properties文件
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis02?useSSL=false
username=root
password=123456 driver2=com.mysql.jdbc.Driver
url2=jdbc:mysql://localhost:3306/mybatis?useSSL=false
username2=root
password2=123456
五,DataSource数据源
dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。数据源类型有三种:UNPOOLED,POOLED,JNDI。
UNPOOLED是没有数据库连接池的,没执行一次操作,打开一次数据库,关闭一次数据库.效率较为低下
POOLED是存在数据库连接池的,没有操作数据库从数据库连接池中拿取连接
JNDI这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。 六 mapper映射器(4种配置)
第一种 配置文件路径(相对项目的相对路径)
<mappers>
<mapper resource="com/shsxt/mapper/UserMapper.xml"></mapper>
</mappers>
第二种 配置文件的绝对路径(不推荐使用,随着项目的变更,路径也要改变,比较麻烦)
<mappers>
<mapper url="file:///F:/IDEA/mybatis02/src/main/resources/mybatis.xml"/>
</mappers>
第三种 注解形式配置(用的相对较少)
<mappers>
<mapper class="com.shsxt.mapper.UserMapper"/>
</mappers>
配置注解的时候,在接口的方法要加上注解,映射文件中可以不用配置sql语句
第四种 映射包下所有接口(较为常用)
<mappers>
<package name="com.shsxt.mapper"/>
</mapper>
七,封装Dao
将UserMapper的接口实现,将接口里方法重写并且实现封装
import com.shsxt.mapper.UserMapper;
import com.shsxt.po.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory; import java.util.List;
import java.util.Map; public class UserMapperImpl implements UserMapper {
private SqlSessionFactory sqlSessionFactory; public UserMapperImpl(SqlSessionFactory sqlSessionFactory) {
this.sqlSessionFactory = sqlSessionFactory;
} @Override
public User queryById(Integer id) {
SqlSession session=null;
User user=null;
try {
session=sqlSessionFactory.openSession();
user=session.selectOne("com.shsxt.mapper.UserMapper.queryById" ,id);
}catch (Exception e){
e.printStackTrace();
}finally {
if(session!=null){
session.close();
}
} return user;
}
八,增删改查,在UserMapper.xml的文件中配置
UserMapper.xm的文件配置内容如下
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.shsxt.mapper.UserMapper">
<sql id="sql">username,realname,password</sql>
<resultMap id="usermap" type="user">
<id column="id" property="id"/>
<result column="username" property="user_name"/>
<result column="realname" property="realname"/>
<result column="password" property="password"/>
</resultMap>
<select id="queryById" parameterType="int" resultMap="usermap">
select * from user where id=#{id}
</select> <select id="queryAll" resultType="int">
select count(*) from user
</select>
<select id="queryUname" resultType="String" >
select username from user where id =#{id}
</select>
<select id="queryByName" parameterType="user" resultType="user">
select username from user where username like concat('%',#{username},'%')
</select> <select id="queryIdByMap" parameterType="int" resultType="map">
select * from user where id=#{id}
</select> <select id="queryUserByMap" parameterType="map" resultType="user">
select * from user where id=#{id} and username=#{username}
</select> <insert id="insertByUser" parameterType="user">
insert into user (username,realname,password) values (#{username},#{realname},#{password})
</insert> <insert id="insertByUserHasKey" parameterType="user"> <selectKey keyProperty="id" order="AFTER" resultType="int">
select LAST_INSERT_ID() as id
</selectKey>
insert into user (username,realname,password) values (#{username},#{realname},#{password}) </insert> <insert id="insertByUserHasKey02" parameterType="user" useGeneratedKeys="true" keyProperty="id">
insert into user (username,realname,password) values (#{username},#{realname},#{password}) </insert> <insert id="insertByUserBatch" parameterType="list" >
insert into user (username,realname,password) values
<foreach collection="list" item="item" separator=",">
(#{item.username},#{item.realname},#{item.password})
</foreach>
</insert> <update id="updateUser" parameterType="user">
update user set username=#{username}, realname=#{realname},password=#{password} where id=#{id}
</update> <update id="updataUserBatch" >
update user set password='88888888' where id in (
<foreach collection="array" item="item" separator="," index="index">
#{item}
</foreach>
)
</update> <delete id="deleteUser" parameterType="int">
delete from user where id=#{id}
</delete> <delete id="deleteUserBatch" parameterType="list">
delete from user where id in (
<foreach collection="list" item="item" separator="," index="index">
#{item}
</foreach>
)
</delete> </mapper>
实现类UserMapperImpl的配置如下:
package com.shsxt.mapper.Impl; import com.shsxt.mapper.UserMapper;
import com.shsxt.po.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import java.util.List;
import java.util.Map; public class UserMapperImpl implements UserMapper {
private SqlSessionFactory sqlSessionFactory; public UserMapperImpl(SqlSessionFactory sqlSessionFactory) {
this.sqlSessionFactory = sqlSessionFactory;
} @Override
public User queryById(Integer id) {
SqlSession session=null;
User user=null;
try {
session=sqlSessionFactory.openSession();
user=session.selectOne("com.shsxt.mapper.UserMapper.queryById" ,id);
}catch (Exception e){
e.printStackTrace();
}finally {
if(session!=null){
session.close();
}
} return user;
} @Override
public Integer queryAll() {
SqlSession session=null;
Integer a=null;
try {
session=sqlSessionFactory.openSession();
a=session.selectOne("com.shsxt.mapper.UserMapper.queryAll" );
}catch (Exception e){
e.printStackTrace();
}finally {
if(session!=null){
session.close();
}
} return a;
} @Override
public String queryUname(Integer id) {
SqlSession session=null;
String abc=null;
try {
session=sqlSessionFactory.openSession();
abc=session.selectOne("com.shsxt.mapper.UserMapper.queryUname", id);
}catch (Exception e){
e.printStackTrace();
}finally {
if(session!=null){
session.close();
}
} return abc;
} @Override
public List<User> queryByName(User user) {
SqlSession session=null;
List<User> list=null;
try {
session=sqlSessionFactory.openSession();
list=session.selectList("com.shsxt.mapper.UserMapper.queryByName", user);
}catch (Exception e){
e.printStackTrace();
}finally {
if(session!=null){
session.close();
}
} return list;
} @Override
public Map queryIdByMap(Integer id) {
SqlSession sqlsession=null;
Map map=null;
try{
sqlsession=sqlSessionFactory.openSession();
map=sqlsession.selectOne("com.shsxt.mapper.UserMapper.queryIdByMap",id);
}catch (Exception e){
e.printStackTrace();
}finally {
if(sqlsession!=null){
sqlsession.close();
}
}
return map;
} @Override
public Integer insertByUser(User user) {
SqlSession session=null;
Integer a=null;
try {
session=sqlSessionFactory.openSession();
a=session.insert("com.shsxt.mapper.UserMapper.insertByUser",user);
}catch (Exception e){
e.printStackTrace();
}finally {
if(session!=null){
session.close();
}
} return a; } @Override
public Integer insertByUserHasKey(User user) {
SqlSession session=null;
Integer a=null;
try {
session=sqlSessionFactory.openSession();
a=session.insert("com.shsxt.mapper.UserMapper.insertByUserHasKey",user);
}catch (Exception e){
e.printStackTrace();
}finally {
if(session!=null){
session.commit();
session.close();
}
}
return a;
} @Override
public Integer insertByUserHasKey02(User user) {
SqlSession session=null;
Integer a=null;
try {
session=sqlSessionFactory.openSession();
a=session.insert("com.shsxt.mapper.UserMapper.insertByUserHasKey02",user);
}catch (Exception e){
e.printStackTrace();
}finally {
if(session!=null){
session.commit();
session.close();
}
} return a;
} @Override
public Integer insertByUserBatch(List<User> list) {
SqlSession session=null;
Integer a=null;
try {
session=sqlSessionFactory.openSession();
a=session.insert("com.shsxt.mapper.UserMapper.insertByUserBatch",list);
}catch (Exception e){
e.printStackTrace();
}finally {
if(session!=null){
session.commit();
session.close();
}
} return a;
} @Override
public User queryUserByMap(Map map) {
SqlSession session=null;
User user=null;
try {
session=sqlSessionFactory.openSession();
user=session.selectOne("com.shsxt.mapper.UserMapper.queryUserByMap",map);
}catch (Exception e){
e.printStackTrace();
}finally {
if(session!=null){
session.commit();
session.close();
}
} return user;
} @Override
public Integer updateUser(User user) {
SqlSession session=null;
Integer a =null;
try {
session=sqlSessionFactory.openSession();
a=session.update("com.shsxt.mapper.UserMapper.updateUser",user);
}catch (Exception e){
e.printStackTrace();
}finally {
if(session!=null){
session.commit();
session.close();
}
} return a;
} @Override
public Integer updataUserBatch(Integer[] ids) {
SqlSession session=null;
Integer aa=null;
try {
session=sqlSessionFactory.openSession();
aa=session.update("com.shsxt.mapper.UserMapper.updataUserBatch",ids);
}catch (Exception e){
e.printStackTrace();
}finally {
if(session!=null){
session.commit();
session.close();
}
}
return aa;
} @Override
public Integer deleteUser(Integer id) {
SqlSession session=null;
Integer aa=null;
try {
session=sqlSessionFactory.openSession();
aa=session.delete("com.shsxt.mapper.UserMapper.deleteUser",id);
}catch (Exception e){
e.printStackTrace();
}finally {
if(session!=null){
session.commit();
session.close();
}
}
return aa;
} @Override
public Integer deleteUserBatch(List<Integer> ids) {
SqlSession session=null;
Integer aa=null;
try {
session=sqlSessionFactory.openSession();
aa=session.update("com.shsxt.mapper.UserMapper.deleteUserBatch",ids);
}catch (Exception e){
e.printStackTrace();
}finally {
if(session!=null){
session.commit();
session.close();
}
}
return aa;
}
}
测试单元的代码如下:
package com.shsxt; import com.shsxt.mapper.Impl.UserMapperImpl;
import com.shsxt.mapper.UserMapper;
import com.shsxt.po.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; public class Test_mybatis02 {
SqlSessionFactory sqlSessionFactory;
@Before
public void ready() throws IOException {
InputStream inputStream= Resources.getResourceAsStream("mybatis.xml");
sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
} /*
* queryById*/
@Test
public void test01(){
UserMapper userMapper=new UserMapperImpl(sqlSessionFactory);
User user= userMapper.queryById(1);
System.out.println(user);
} @Test
public void test02(){
UserMapper userMapper=new UserMapperImpl(sqlSessionFactory);
Integer a = userMapper.queryAll();
System.out.println("总数量是:"+a);
}
@Test
public void test03(){
UserMapper userMapper=new UserMapperImpl(sqlSessionFactory);
String aa = userMapper.queryUname(1);
System.out.println("id为1的uname是:"+aa);
} @Test
public void test04(){
UserMapper userMapper=new UserMapperImpl(sqlSessionFactory);
User user=new User();
user.setUser_name("hello");
List<User> lists = userMapper.queryByName(user);
for (User per_user :lists) {
System.out.println(per_user);
}
}
@Test
public void test05(){
UserMapper userMapper=new UserMapperImpl(sqlSessionFactory);
Map map= userMapper.queryIdByMap(1);
System.out.println(((Map) map).toString());
} @Test
public void test06(){
UserMapper userMapper=new UserMapperImpl(sqlSessionFactory);
User user=new User();
user.setUser_name("ahah");
user.setRealname("papapa");
user.setPassword("89533");
Integer aavv=userMapper.insertByUser(user);
System.out.println(aavv); }
@Test
public void test07(){
UserMapper userMapper=new UserMapperImpl(sqlSessionFactory);
User user=new User();
user.setUser_name("ahah");
user.setRealname("papapa");
user.setPassword("89533");
Integer aavv=userMapper.insertByUserHasKey(user);
System.out.println("受影响的行数: "+aavv);
System.out.println("返回的id是: "+user.getId());
}
@Test
public void Test08(){
UserMapper userMapper=new UserMapperImpl(sqlSessionFactory);
User user=new User();
user.setUser_name("ahah");
user.setRealname("papapa");
user.setPassword("89533");
Integer aavv=userMapper.insertByUserHasKey02(user);
System.out.println("受影响的行数: "+aavv);
System.out.println("返回的id是: "+user.getId());
} @Test
public void Test09(){
UserMapper userMapper=new UserMapperImpl(sqlSessionFactory);
List<User> list=new ArrayList<>();
for (int i = 0; i <10 ; i++) {
User user=new User();
user.setUser_name("haha"+i);
user.setPassword("123456"+i);
user.setRealname("hehe"+i);
list.add(user);
}
Integer aavv=userMapper.insertByUserBatch(list);
System.out.println("受影响的行数: "+aavv); }
@Test
public void Test10(){
UserMapper userMapper=new UserMapperImpl(sqlSessionFactory);
Map map=new HashMap();
map.put("id",1);
map.put("username","hello");
User user=userMapper.queryUserByMap(map);
System.out.println(user);
} @Test
public void Test11(){
UserMapper userMapper=new UserMapperImpl(sqlSessionFactory);
User user=new User();
user.setRealname("laodu");
user.setPassword("888888");
user.setUser_name("liudaye");
user.setId(1);
Integer a= userMapper.updateUser(user);
System.out.println(a);
}
@Test
public void Test12(){
UserMapper userMapper=new UserMapperImpl(sqlSessionFactory);
Integer[] aa=new Integer[10];
for (int i = 0; i < 10; i++) {
aa[i]=i+10;
}
Integer a= userMapper.updataUserBatch(aa);
System.out.println(a);
}
@Test
public void Test13(){
UserMapper userMapper=new UserMapperImpl(sqlSessionFactory);
Integer a= userMapper.deleteUser(22);
System.out.println(a);
} @Test
public void Test14(){
UserMapper userMapper=new UserMapperImpl(sqlSessionFactory);
List<Integer> list=new ArrayList<>(); for (int i = 10; i < 20; i++) {
list.add(i);
}
Integer a= userMapper.deleteUserBatch(list);
System.out.println(a);
} }
九,sql片段和动态sql
ql 元素用来定义一个可以复用的 SQL 语句段,供其它语句调用,例如
<sql id="User_columns">userId, userName, password</sql>
<!--用 include 引用-->
<select id="findUserById" resultMap="RM_User" >
<include refid="User_columns"/> from user where userId =#{userId}
</select> Batis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦。拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号。
利用动态 SQL 这一特性,可以彻底摆脱这种痛苦。它借助 ognl(类似于 jsp 里面的 el 表达式)表达式来完成动态 sql 的拼接使得非常简便。 1,条件判断 使用 if 标签就是加一个 test 属性作为判断, 如果有多个条件组合判断的话用 and, or连接
<select id="queryByName" parameterType="string" resultType="user" resultMap="usermap">
select * from user where 1=1
<if test="null!=username and ''!=username">
and username like concat('%',#{username},'%')
</if>
</select>
测试方法
import com.shsxt.mapper.UserMapper;
import com.shsxt.po.User;
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 org.junit.Before;
import org.junit.Test;
import java.io.InputStream;
import java.util.List; public class mybaties03_Test {
private UserMapper userMapper;
@Before
public void before() throws Exception{
InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
userMapper =sqlSession.getMapper(UserMapper.class);
}
@Test
public void test02(){
List<User> list=userMapper.queryByName("li");
for (User user:list) {
System.out.println(user);
}
}
}
2,choose,when,otherwise
我们不想用到所有的条件语句,而只想从中择其一二。针对这种情况,MyBatis 提供了 choose 元素,它有点像 Java 中的 switch 语句
<select id="queryByParams" parameterType="string" resultMap="usermap" resultType="user">
select id,
<choose>
<when test="realname!=null and realname!='' ">
username
</when>
<otherwise>
password
</otherwise>
</choose>
from user
</select>
测试方法
import com.shsxt.mapper.UserMapper;
import com.shsxt.po.User;
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 org.junit.Before;
import org.junit.Test;
import java.io.InputStream;
import java.util.List; public class mybaties03_Test {
private UserMapper userMapper;
@Before
public void before() throws Exception{
InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
userMapper =sqlSession.getMapper(UserMapper.class);
}
@Test
public void test03(){
List<User> list=userMapper.queryByParams("hello");
for (User user:list) {
System.out.println(user);
}
}
}
10,mapper 接口代理方式的 crud 开发
对于 mapper 接口方式开发,需要遵循 mybatis 开发规范,mybatis 框架可以自
动生成 mapper 接口对象。
完成账户表 crud 操作
开发规则:
1. mapper.xml 中 namespace 等于接口类全限定名
2. mapper.java 接口中的方法名必须与 mapper.xml 中 statement id 一致
3. mapper.java 输入参数类型必须与 mapper.xml 中 statement 的
parameterType 参数类型一致
4.mapper.java 中方法的返回值类型必须与 mapper.xml 中对应 statement 返回
值类型一致。
接口名 与映射文件名称 一致(非集成环境)
映射文件与接口处于同一个包中(非集成环境
InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
userMapper =sqlSession.getMapper(UserMapper.class);
说白了就是我们不需要手动创建实现类了,mybatis的框架会帮我们通过动态代理来创建实现类,我们只需要用接口去接收创建好的实现的对象就可以了.
mybatis的配置文件详解(二)的更多相关文章
- MyBatis核心配置文件详解
------------------------siwuxie095 MyBatis 核心配置文件详解 1.核心 ...
- mybatis代码生成器配置文件详解
mybatis代码生成器配置文件详解 更多详见 http://generator.sturgeon.mopaas.com/index.html http://generator.sturgeon.mo ...
- MyBatis 全局配置文件详解(七)
MyBatis 配置文件作用 MyBatis配置文件包含影响 MyBatis 框架正常使用的功能设置和属性信息.它的作用好比手机里的设置图标,点击这个图标就可以帮助我们查看手机的属性信息和设置功能.其 ...
- Mybatis全局配置文件详解(三)
每个基于Mybatis应用都是以一个SqlSessionFactory实例为中心.SqlSessionFactory实例可以由SqlSessionFactoryBuild获得,而SqlSessionF ...
- mybatis主配置文件详解
mybatis主配置文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configur ...
- mybatis Generator配置文件详解
这里按照配置的顺序对配置逐个讲解,更细的内容可以配合中文文档参照. 1. 配置文件头 <?xml version="1.0" encoding="UTF-8&quo ...
- Mybatis连接配置文件详解
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC &q ...
- MyBatis映射配置文件详解
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-// ...
- SpringMVC+MyBatis+Shiro 配置文件详解
1.web.xml文件的配置 <?xml version="1.0" encoding="UTF-8"?> <web-app version= ...
随机推荐
- Docker pull php:7.1-fpm的php.ini配置修改
今天,换了 Deepin 操作系统,开发环境是通过 Docker 搭建的,具体结构如下: CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e ...
- [CF261E]Maxim and Calculator_搜索_欧拉筛素数_动态规划
Maxim and Calculator 题目链接:https://www.luogu.org/problem/CF261E 数据范围:略. 题解: 考试的时候只会暴力,学弟太强了$\%\%\% Or ...
- ThreadLocal父子线程之间的数据传递问题
一.问题的提出 在系统开发过程中常使用ThreadLocal进行传递日志的RequestId,由此来获取整条请求链路.然而当线程中开启了其他的线程,此时ThreadLocal里面的数据将会出现无法获取 ...
- (十)springMvc 校验
目录 文章目录 目录 @[toc] springMvc 校验 准备 踩坑 配置校验器 将校验器注入到适配器中 在 pojo 中配置校验规则 在 controller 层进行检验 获取错误信息 将错误信 ...
- 剑指offer26:将二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
1 题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 2 思路和方法 在二叉搜索树中,每个结点都有两个分别指向其左.右子树的 ...
- codeforces 1244E Minimizing Difference (贪心)
(点击此处查看原题) 题意分析 给出n个数,a1,a2...an,现在可以进行最多k次操作,每次操纵可以使得任意一个数自增或者自减,问经过最多k次操作后,n个数中的最大值-最小值最小为多少? 解题思路 ...
- multipart/form-data(二进制流) 两种传输方式
一.传统表单提交传输方式 <form id= "uploadForm" action= "url" method= "post" en ...
- 解决python无法安装mysql数据库问题
解决python无法安装mysql数据库问题: pip install pymysql[使用这个命令来安装]
- Log4net采用外部配置文件和多记录器的方法
1) 创建配置文件,可以放在任意位置,名字可以任意的xml文件 例如,文件名 Log.Config.xml,内容如下 <?xml version="1.0" encoding ...
- codeblocks 使用汇总
codeblocks 使用汇总 http://www.cnblogs.com/-clq/archive/2012/01/31/2333247.html