mybatis02
Posted 坚持_第一天
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis02相关的知识,希望对你有一定的参考价值。
例子:
查找的例子
User getuserByid2(Map<String,Object> map);
?
<select id="getuserByid2" resultType="com.lt.pojo.User" parameterType="map">
select * from user where id=#{id}
</select>
?
@Test
public void test7(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map<String, Object> map = new HashMap<>();
map.put("id","1");
User user = mapper.getuserByid2(map);
System.out.println(user); ///////////////查找时不要忘记输出
sqlSession.close();
}
插入的例子
int addUser2(Map<String,Object> map);
?
<insert id="addUser2" parameterType="map">
insert into user (id,userName,password) values(#{id},#{userName},#{password})
</insert>
public void test6(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map<String, Object> map = new HashMap<>();
map.put("id",5);
map.put("userName","刘能");
map.put("password","159");
int i = mapper.addUser2(map);
sqlSession.commit(); ///////////如果没开启自动提交,一定不要忘记加commit
sqlSession.close();
}
LIKE模糊查询
例子:
List<User> getUserLike(String name);
?
<select id="getUserLike" resultType="com.lt.pojo.User">
select * from user where userName LIKE "%"#{name}"%"
</select> //// 为了防止注入,要在查询语句中加入%
?
@Test
public void test5(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> l = mapper.getUserLike("刘");
for (User user : l) {
System.out.println(user);
}
sqlSession.close();
核心配置文件
environments
可以有多个环境,但是只有一个默认环境。如:default=”development”
transactionManager
事务管理器
JDBC – 这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得 到的连接来管理事务作用域。 MANAGED – 这个配置几乎没做什么
dataSource
使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。
type[UNPOOLED|POOLED|JNDI]”):
UNPOOLED– 这个数据源的实现只是每次被请求时打开和关闭连接。
POOLED– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来
JNDI– 这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集 中或在外部配置数据源,然后放置一个 JNDI 上下文的引用
mappers
映射的四个用法
1.<mapper resource="org/mybatis/builder/AuthorMapper.xml"/> 2.<mapper url="file:///var/mappers/AuthorMapper.xml"/> 3.<mapper class="org.mybatis.builder.AuthorMapper"/>
4.<package name="org.mybatis.builder"/>
推荐用第一种和第四种,
properties
是可外部配置且可动态替换的,既可以在典型的 Java 属性文件中配置,亦可 通过 properties 元素的子元素来传递。
如:
username=mpmvfe
?
?
?
<properties resource="org/mybatis/example/config.properties">
?
//调用外部的properties文件
<property name="username" value="username"/>
</properties>
?
//然后dataSource可以更替配置信息,例子
<property name="driver" value="${username}"/>
?
settings
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="multipleResultSetsEnabled" value="true"/>
<setting name="useColumnLabel" value="true"/>
<setting name="useGeneratedKeys" value="false"/>
<setting name="autoMappingBehavior" value="PARTIAL"/>
<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<setting name="defaultStatementTimeout" value="25"/>
<setting name="defaultFetchSize" value="100"/>
<setting name="safeRowBoundsEnabled" value="false"/>
<setting name="mapUnderscoreToCamelCase" value="false"/>
<setting name="localCacheScope" value="SESSION"/>
<setting name="jdbcTypeForNull" value="OTHER"/>
<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>
typeAliases别名设置
存在的意义仅在于 用来减少类完全限定名的冗余
例子:
<typeAliases>
<typeAlias alias="User" type="com.lt.pojo.User"/>
</typeAliases>
?
//再用com.lt.pojo.User的时候可以直接用User了
也可以指定包名
//,MyBatis 会在包名下面搜索需要的 Java Bean 直接用小写类名就可以
<typeAliases>
<package name="domain.blog"/>
</typeAliases>
还可以在实体类上边加个注解如:
@Alias("User")
publi class User{}
生命周期和作用域
SqlSessionFactoryBuilder
这个类可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了。
最佳作用域是方法作用域(也就是局部方法变 量)。
SqlSessionFactory
一旦被创建就应该在应用的运行期间一直存在,没有任何理由对它进 行清除或重建
最佳作用域是应用作用域。有很多方法可以做到,最简单的就是使 用单例模式或者静态单例模式。
SqlSession
SqlSession 的实例不是线程安全的,所以它的最佳的作用域是请求或方法作用域
返回一个 响应,就关闭它。
resultMap结果集映射
解决实体类和表明不对照的情况
日志工厂
logImpl 指定 MyBatis 所用日志的具体 实现,未指定时将自动查找。 SLF4J | LOG4J | LOG4J2 | JDK_LO GGING | COMMON S_LOGG ING | STDOUT _LOGGI NG | NO_LOG GING
STDOUT _LOGGI NG :标准日志输出
LOG4J:需要导包,需要配置properties
分页
List<User> getUserLimit(Map<String,Integer> map);
?
<select id="getUserLimit" resultType="com.lt.pojo.User" parameterType="map">
select * from user limit #{index},#{index_n}
</select>
public void test8(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map<String, Integer> map = new HashMap<>();
map.put("index",0);map.put("index_n",2);
List<User> userList = mapper.getUserLimit(map);
for (User o : userList) {
System.out.println(o);
}
sqlSession.close();
}
注解实现增删改查
查:
@Select("select * from user")
List<User> getUserList1();
public void test9(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.getUserList1();
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
@Select("select * from user where id=#{id}")
User getuserByid3(int id);
?
public void test10(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.getuserByid3(2);
System.out.println(user);
sqlSession.close();
}
其他以此类推。。。。。。。。。。。。。。。。
例子:
查找的例子
User getuserByid2(Map<String,Object> map);
?
<select id="getuserByid2" resultType="com.lt.pojo.User" parameterType="map">
select * from user where id=#{id}
</select>
?
@Test
public void test7(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map<String, Object> map = new HashMap<>();
map.put("id","1");
User user = mapper.getuserByid2(map);
System.out.println(user);///////////////查找时不要忘记输出
sqlSession.close();
}
插入的例子
int addUser2(Map<String,Object> map);
?
<insert id="addUser2" parameterType="map">
insert into user (id,userName,password) values(#{id},#{userName},#{password})
</insert>
public void test6(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map<String, Object> map = new HashMap<>();
map.put("id",5);
map.put("userName","刘能");
map.put("password","159");
int i = mapper.addUser2(map);
sqlSession.commit(); ///////////如果没开启自动提交,一定不要忘记加commit
sqlSession.close();
}
LIKE模糊查询
例子:
List<User> getUserLike(String name);
?
<select id="getUserLike" resultType="com.lt.pojo.User">
select * from user where userName LIKE "%"#{name}"%"
</select> ////为了防止注入,要在查询语句中加入%
?
@Test
public void test5(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> l = mapper.getUserLike("刘");
for (User user : l) {
System.out.println(user);
}
sqlSession.close();
核心配置文件
environments
可以有多个环境,但是只有一个默认环境。如:default=”development”
transactionManager
事务管理器
JDBC – 这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得 到的连接来管理事务作用域。 MANAGED – 这个配置几乎没做什么
dataSource
使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。
type[UNPOOLED|POOLED|JNDI]”):
UNPOOLED– 这个数据源的实现只是每次被请求时打开和关闭连接。
POOLED– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来
JNDI– 这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集 中或在外部配置数据源,然后放置一个 JNDI 上下文的引用
mappers
映射的四个用法
1.<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>2.<mapper url="file:///var/mappers/AuthorMapper.xml"/>3.<mapper class="org.mybatis.builder.AuthorMapper"/>
4.<package name="org.mybatis.builder"/>
推荐用第一种和第四种,
properties
是可外部配置且可动态替换的,既可以在典型的 Java 属性文件中配置,亦可 通过 properties 元素的子元素来传递。
如:
username=mpmvfe
?
?
?
<properties resource="org/mybatis/example/config.properties">
?
//调用外部的properties文件
<property name="username" value="username"/>
</properties>
?
//然后dataSource可以更替配置信息,例子
<property name="driver" value="${username}"/>
?
settings
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="multipleResultSetsEnabled" value="true"/>
<setting name="useColumnLabel" value="true"/>
<setting name="useGeneratedKeys" value="false"/>
<setting name="autoMappingBehavior" value="PARTIAL"/>
<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<setting name="defaultStatementTimeout" value="25"/>
<setting name="defaultFetchSize" value="100"/>
<setting name="safeRowBoundsEnabled" value="false"/>
<setting name="mapUnderscoreToCamelCase" value="false"/>
<setting name="localCacheScope" value="SESSION"/>
<setting name="jdbcTypeForNull" value="OTHER"/>
<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>
typeAliases别名设置
存在的意义仅在于 用来减少类完全限定名的冗余
例子:
<typeAliases>
<typeAlias alias="User" type="com.lt.pojo.User"/>
</typeAliases>
?
//再用com.lt.pojo.User的时候可以直接用User了
也可以指定包名
//,MyBatis 会在包名下面搜索需要的 Java Bean 直接用小写类名就可以
<typeAliases>
<package name="domain.blog"/>
</typeAliases>
还可以在实体类上边加个注解如:
@Alias("User")
publi class User{}
生命周期和作用域
SqlSessionFactoryBuilder
这个类可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了。
最佳作用域是方法作用域(也就是局部方法变 量)。
SqlSessionFactory
一旦被创建就应该在应用的运行期间一直存在,没有任何理由对它进 行清除或重建
最佳作用域是应用作用域。有很多方法可以做到,最简单的就是使 用单例模式或者静态单例模式。
SqlSession
SqlSession 的实例不是线程安全的,所以它的最佳的作用域是请求或方法作用域
返回一个 响应,就关闭它。
resultMap结果集映射
解决实体类和表明不对照的情况
日志工厂
logImpl 指定 MyBatis 所用日志的具体 实现,未指定时将自动查找。SLF4J | LOG4J | LOG4J2 | JDK_LO GGING | COMMON S_LOGG ING | STDOUT _LOGGI NG | NO_LOG GING
STDOUT _LOGGI NG :标准日志输出
LOG4J:需要导包,需要配置properties
分页
List<User> getUserLimit(Map<String,Integer> map);
?
<select id="getUserLimit" resultType="com.lt.pojo.User" parameterType="map">
select * from user limit #{index},#{index_n}
</select>
public void test8(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map<String, Integer> map = new HashMap<>();
map.put("index",0);map.put("index_n",2);
List<User> userList = mapper.getUserLimit(map);
for (User o : userList) {
System.out.println(o);
}
sqlSession.close();
}
注解实现增删改查
查:
@Select("select * from user")
List<User> getUserList1();
public void test9(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.getUserList1();
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
@Select("select * from user where id=#{id}")
User getuserByid3(int id);
?
public void test10(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.getuserByid3(2);
System.out.println(user);
sqlSession.close();
}
其他以此类推。。。。。。。。。。。。。。。。
以上是关于mybatis02的主要内容,如果未能解决你的问题,请参考以下文章
SSM-MyBatis-05:Mybatis中别名,sql片段和模糊查询加getMapper