mybatis02

Posted 坚持_第一天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis02相关的知识,希望对你有一定的参考价值。

Map的使用

例子:

查找的例子

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();
  }

其他以此类推。。。。。。。。。。。。。。。。

 

Map的使用

例子:

查找的例子

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的主要内容,如果未能解决你的问题,请参考以下文章

mybatis学习(39):动态sql片段

SSM-MyBatis-05:Mybatis中别名,sql片段和模糊查询加getMapper

mybatis动态sql片段与分页,排序,传参的使用

MyBatis动态SQL标签用法

MYBATIS05_ifwherechoosewhentrimsetforEach标签sql片段

[linux][c/c++]代码片段02