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= ...
随机推荐
- JavaScript 检测值
了解常见的真值和假值,可以增强判断能力.在使用if判断时,提升编码速度. 了解常见的检测和存在,一样可以增强判断能力,而且是必须掌握的. 数组和对象被视为真值 1 2 3 4 5 6 7 8 9 10 ...
- LeetCode 第 164 场周赛
访问所有点的最小时间 不难看出,从点(x1,y1) 到 (x2,y2) 的步数需要 min(dx,dy),其中 dx = abs(x1-x2),dy = abs(y1-y2) class Soluti ...
- Linux IO模式以及select poll epoll详解
一 背景 同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的.所以先限定一下本文的上下文. 本文讨论的背景是Linux环境下的network ...
- php商城秒杀活动
今天在网上看到一篇思路+代码的商城秒杀实例,我觉得非常不错,借鉴一下分享给大家: 一.前言 双十一刚过不久,大家都知道在天猫.京东.苏宁等等电商网站上有很多秒杀活动,例如在某一个时刻抢购一个原价199 ...
- 关于python中的包,模块导入的问题详解(一)
最近由于初学python,对包,模块的导入问题进行了资料的搜集,查阅,在这里做一个总结: 一: import 模块 在import的过程中发生了什么?我们用一个实验来说明: 以上截图表明:在impor ...
- 【第二季】CH11_ ZYNQ软硬调试高级技巧
[第二季]CH11_ ZYNQ软硬调试高级技巧 软件和硬件的完美结合才是SOC的优势和长处,那么开发ZYNQ就需要掌握软件和硬件开发的调试技巧,这样才能同时分析软件或者硬件的运行情况,找到问题,最终解 ...
- Codeforces 1097E. Egor and an RPG game
传送门 首先考虑怎么算 $f(n)$ (就是题目里面那个 $f(n)$) 发现可以构造一组序列大概长这样: ${1,3,2,6,5,4,10,9,8,7,15,14,13,12,11,...,n(n+ ...
- MyBatis Java不同方式加载文件时的路径格式问题、Mybatis中加载.properties文件
public class LoadPropTest { public static void main(String[] args) throws IOException { //一.Properti ...
- sublime 配置大全
最近玩 python ,一般用的编译器是 pycharm ,功能强大,但是苦于启动速度遂准备换坑,瞄上了 sublime .这里记录一下 sublime 的设置以及坑爹项,需要注意的是我用的是 sub ...
- linux 安装redis 完整步骤
最近在linux服务器上需要安装redis,来存放数据,增加用户访问数据的速度,由于是第一次安装,于是在百度上搜了一篇文章,按照这篇博客,顺利安装好了,因此将博主的文章拷过来记录一下,方便以后使用,也 ...