快速入门1 要点:

首先明白mybatis 是什么

这是一个持久层的框架。之前叫做ibatis。所以,在它的代码中出现ibatis这个词的时候,不要感到惊讶。不是写错了,它确实就是这个样子的。

首先,我们来看看mybatis是个什么东西,它有什么用?我们为什么要学习它。mybatis是一个持久层的框架。所谓的持久层,就是我们三层中的dao层。主要负责跟数据库进行交互。可以建立数据库表和系统中的对象的一对一映射关系。这种框架我们称之为orm框架。但是mybatis框架需要自己写sql语句,且不能像hibernate那样自动生成sql语句,并且建立实体类和数据库的映射。所以我们说它是不完全的orm框架。

首先导入mybatis 的jar 数据库的驱动包。

创建myBatis.config.xml配置

首先配置数据库连接,数据库连接可以单独创建一个db.config.properties 文件进行单独存放

创建一个properties 文件,取名为db.config 里面配置好数据库连接

#oracle连接字符串定义
pacsdb.type=oracle #数据库指定类型
pacs.driverClassName:oracle.jdbc.driver.OracleDriver #连接数据库要加载驱动.前面oracle.jdbc.driver是包名,类名是OracleDriver
pacs.url:CWUiPEP9glDkHFwo1E8OOD4cWwdkfTiG9eNGROvijF+jYFm6rPzK9kUW5hod/OUz #数据库的地址 例如:10.68.4.29:8020/oracl
pacs.username:UiA8nxqOjyo= #用户名
pacs.password:9sFRpfIc/oAcWr8+zX5Q6g==

下一步:需要把刚才创建的数据库连接配置文件加载进来

<!--数据源配置----->
<bean id="propertyconfigurer" class="com.msunsoft.rmtdx.security.EncryptPropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:db.config.properties</value>
</list>
</property>
</bean>

数据库的配置文件加载进来之后,在当前的配置文件里面就可以取到配置文件里面配置的一些变量了。配置如下

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<!-- 基本属性 url、user、password -->
<property name="url" value="${pacs.url}"/>
<property name="username" value="${pacs.username}"/>
<property name="password" value="${pacs.password}"/>
<property name="connectionProperties" value="${pacs.driverClassName}"/>
<!-- 配置初始化大小、最小、最大 -->
<property name="initialSize" value="1"/>
<property name="minIdle" value="1"/>
<property name="maxActive" value="20"/>
<!-- 配置获取连接等待超时的时间 -->
<property name="maxWait" value="60000"/>
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000"/>
<property name="validationQuery" value="select 'x'"/>
<property name="testWhileIdle" value="true"/>
<property name="testOnBorrow" value="false"/>
<property name="testOnReturn" value="false"/>
<!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
<property name="poolPreparedStatenents" value="true"/>
<property name="maxPoolPreparedStatementPerConnectionSize" value="20"/>
!-- 配置监控统计拦截的filters --通过别名的方式配置扩展插件,常用的插件有:
监控统计用的filter:stat日志用的filter:log4j防御sql注入的filter:wall-->
<property name="filters" value="stat"/>
<!---https://www.cnblogs.com/wuyun-blog/p/5679073.html--这个网站提供了DRUID连接池的实用 配置详解 及全部的配置参数详解--->
</bean>

想在程序运行时输出一些日志信息,那么我们就需要配置日志包

下面配置日志包log4j

配置log4j 有两种方式,一种是log4jproperties 另一种是log4j.xml的方式。我们这里用配置xml的方式来配

下面附上配置代码,这个配置的时候直接复制就可以

<?xml version="1.0" encoding="UTF-8"?>
<!--设置log4j2的自身log级别为warn-->
<configuration status="warn">
<appenders>
<console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
</console>
<RollingFile name="RollingFileInfo" fileName="${sys:user.home}/logs/remote_diagnosis_pacs/info.log"
filePattern="${sys:user.home}/logs/remote_diagnosis_pacs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
<Filters>
<ThresholdFilter level="INFO"/>
<ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
</Filters>
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
<RollingFile name="RollingFileDebug" fileName="${sys:user.home}/logs/remote_diagnosis_pacs/debug.log"
filePattern="${sys:user.home}/logs/remote_diagnosis_pacs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
<Filters>
<ThresholdFilter level="DEBUG"/>
<ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="INFO" onMatch="DENY" onMismatch="NEUTRAL"/>
</Filters>
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
<RollingFile name="RollingFileError" fileName="${sys:user.home}/logs/remote_diagnosis_pacs/error.log"
filePattern="${sys:user.home}/logs/remote_diagnosis_pacs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
<ThresholdFilter level="ERROR"/>
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
</appenders>
<loggers>
<!-- 第三方的软件日志级别 -->
<AsyncLogger name="org.springframework" level="info" additivity="true">
<AppenderRef ref="RollingFileInfo"/>
</AsyncLogger>
<asyncRoot level="all">
<appender-ref ref="Console"/>
<appender-ref ref="RollingFileInfo"/>
<appender-ref ref="RollingFileDebug"/>
<appender-ref ref="RollingFileError"/>
</asyncRoot>
</loggers>
</configuration>

下面这个配置是可配,如果集成的是spring 则需要配上mybatis的一个sqlsession工厂

Mybatis 的sqlsession工厂
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dynamicDataSource"/> 因为数据源已经写好所以这个地方用ref引用 。指定数据源
<property name="typeAliasesPackage" value="com.msunsoft.rmtdx.entity"/> 这个是类型别名包 默认是类的名称
<property name="configLocation" value="classpath:mybatis.config.xml"/>
<property name="mapperLocations" value="classpath*:mapper/${pacsdb.type}/*.xml"/>
</bean> Mybatis 自动扫描加载sql映射文件、接口: <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>引用上面配好的sqlSessionFactory
<property name="basePackage" value="com.msunsoft.rmtdx.mapper"/>自动扫描加载sql文件映射文件,包括接口
</bean>

以上咱们的mybatis 配置就算完成了。

下面就是Mybatis 的用法,

mybatis 主要的就是两个文件一个是mapping.xml 文件 这个文件里面主要就是sql语句,注意,所有的sql都存在这个文件里面,我觉得这是mybatis的一个特性,特别容易方便管理,代码里压根就不体现sql语句了。 。另一个就是mapping的接口文件。我的个人理解以上就是

下面弄一个实例demo

首先建造数据库表的model类文件 用于映射数据库表

public class User {
private int id;
private String username;// 用户姓名
private String sex;// 性别
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", sex=" + sex
+ "]";
} }

接着创建一个mapping.xml文件

注意:mapping.xml里面的namespace 必须是与之对应的接口的全路径。

下面标签里面的属性可以自行百度下,这里就不详解了。

<?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.msunsoft.rmtdx.mapper.UserMapping">
<resultMap id="BaseResultMap" type="com.msunsoft.rmtdx.entity.po.User">
<id column="ID" jdbcType="DECIMAL" property="id" />
<result column="username" jdbcType="VARCHAR" property="name" /> </resultMap>
<select id="selectBlApplyAll" resultMap="BaseResultMap" parameterType="com.msunsoft.rmtdx.entity.vo.getUser">
select ID, username from User
</select> </mapper>

在创建mapping.xml 对应的一个接口

public interface UserMapper {
/**
* 获取数据列表
* @param
* @return
* 添加标识:2018-01-03 10:55 赵成伟
*/
List<PacsConsultationApply> selectBlApplyAll(); }

以上mybatis的环境全部配置完毕,下面就可以去程序里面跑了。

下面记录下个别的用法resultMap 是个键值对的接口。 定义个别名

<resultMap  id="BaseresultMap" type="指向model类文件的全路径">

<id property=”id” jdbcType=”string” column=”order_id”/>

注释,这个id是专门用来针对主键的。

result 是针对一般字段的。

<result peoperty=”name” column=”myname”/>

<Association property=’’另一个表名” >

<id property=”id” jdbcType=”string” column=”order_id”/>

</Association >

</resultMap>

resultMap 用来封装一些映射关系,键值对。

Association 关联的意思。一对一查询

一级缓存与二级缓存

二级缓存,是一个映射文件级的缓存

只需要要在mapper里面加个标签就可以

<cache>

里面一些配置属性。

</cache>

练习。

Spring 集成mybatis

首先添加jar包 最重要的是mybatis-spring -1.1.1.jar

数据库的驱动包等等。。。

创建实体类

User

创建 mapper接口

Interface userMapper

创建userMapper..xml

创建Spring的配置文件beans.xml

Beans.xml 里面首先配置数据源

所有的配置都是在bean标签里面配置

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
      init-method="init" destroy-method="close">
    <!-- 基本属性 url、user、password -->
    <property name="url" value="${pacs.url}"/>
    <property name="username" value="${pacs.username}"/>
    <property name="password" value="${pacs.password}"/>
    <property name="connectionProperties" value="${pacs.driverClassName}"></property>

<!-- 配置初始化大小、最小、最大 -->
    <property name="initialSize" value="1"/>
    <property name="minIdle" value="1"/>
    <property name="maxActive" value="20"/>

<!-- 配置获取连接等待超时的时间 -->
    <property name="maxWait" value="60000"/>

<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
    <property name="timeBetweenEvictionRunsMillis" value="60000"/>

<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
    <property name="minEvictableIdleTimeMillis" value="300000"/>

<property name="validationQuery" value="SELECT 'x'"/>
    <property name="testWhileIdle" value="true"/>
    <property name="testOnBorrow" value="false"/>
    <property name="testOnReturn" value="false"/>

<!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
    <property name="poolPreparedStatements" value="true"/>
    <property name="maxPoolPreparedStatementPerConnectionSize"
              value="20"/>

<!-- 配置监控统计拦截的filters -->
    <property name="filters" value="stat"/>
</bean>

Mybatis 的sqlsession工厂

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dynamicDataSource"/> 因为数据源已经写好所以这个地方用ref引用 。指定数据源
    <property name="typeAliasesPackage" value="com.msunsoft.rmtdx.entity"/> 这个是类型别名包 默认是类的名称
    <property name="configLocation" value="classpath:mybatis.config.xml"/>
    <property name="mapperLocations" value="classpath*:mapper/${pacsdb.type}/*.xml"/>
</bean>

Mybatis 自动扫描加载sql映射文件、接口:

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>引用上面配好的sqlSessionFactory
    <property name="basePackage" value="com.msunsoft.rmtdx.mapper"/>自动扫描加载sql文件映射文件,包括接口
</bean>

事物管理

<bean id="transactionManager"
      class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dynamicDataSource"/> 引用之前配置的数据源

</bean>

使用声明式事物

<!-- 全注解方式   需加上@Transactional -->
<tx:annotation-driven transaction-manager="transactionManager"/>

这个配置引用上面定义好的事物管理器

创建一个mybatis,xml

里面不需要写啥了,但是得有

mybatis 学习笔记 -详解mybatis 及实例demo的更多相关文章

  1. MyBatis学习笔记(二)——使用MyBatis对表执行CRUD操作

    转自孤傲苍狼的博客:http://www.cnblogs.com/xdp-gacl/p/4262895.html 上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用My ...

  2. mybatis学习笔记 spring与mybatis整合

    转载自http://blog.csdn.net/naruto_Mr/article/details/48239357 1.创建web工程,导入spring依赖包与mybatis依赖包,还需要mybat ...

  3. MyBatis学习笔记(3)—— 利用mybatis灌入假数据

    由于第三方厂商未能按时提供实时数据,故需要纯手动导入一些实时数据,用于统计分析.正好最近自己学习了mybatis .因此使用mybatis 配置一个select.insert 的简单操作语句,用于灌入 ...

  4. 1.1(Mybatis学习笔记)初识Mybatis

    一.Mybatis下载与使用 下载地址:https://github.com/mybatis/mybatis-3/releases 下载后解压目录: 需要将lib下的jar包和mybatid-x-x- ...

  5. Mybatis学习笔记-第一个Mybatis程序

    思路 搭建环境 搭建数据库(略) CREATE DDATABASE CREATE TABLE INSERT VALUES 新建项目 普通Maven项目 删除src文件夹 --> 建立父工程 导入 ...

  6. SpringMVC + Spring + MyBatis 学习笔记:为MyBatis增加打印SQL功能 (最简化配置)

    系统:WIN8.1 数据库:Oracle 11GR2 开发工具:MyEclipse 8.6 框架:Spring3.2.9.SpringMVC3.2.9.MyBatis3.2.8 1.以下jar包拷贝到 ...

  7. MyBatis学习笔记1--初识MyBatis

    我也是初学者,写博客只是想把自己的整个思路整理一下,有不对或者不好的地方,请大家多多指正. 1.MyBatis简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射. ...

  8. MyBatis学习笔记(三)——优化MyBatis配置文件中的配置

    转自孤傲苍狼的博客:http://www.cnblogs.com/xdp-gacl/p/4264301.html 一.连接数据库的配置单独放在一个properties文件中 之前,我们是直接将数据库的 ...

  9. sql注入学习笔记 详解篇

    sql注入的原理以及怎么预防sql注入(请参考上一篇文章) https://www.cnblogs.com/KHZ521/p/12128364.html (本章主要针对MySQL数据库进行注入) sq ...

随机推荐

  1. LCT模板(无讲解)

    怎么说呢,照着打一遍就自然理解了,再打一遍就会背了,再打一遍就会推了. // luogu-judger-enable-o2 #include<bits/stdc++.h> using na ...

  2. python之路-格式化输出、编码

    格式化输出 user = input('Username:') pwd = input('Password:') msg = 'your username:%s,your password:%d,10 ...

  3. cocoapods 换源

    1. 用以下步骤换源: pod repo remove master pod repo add master https://code.aliyun.com/Magi/CocoaPods.git po ...

  4. js jquery 正则去空字符

    1.正则去空字符串: var str1=" a b c "; var strtrim=str1.replace(/\s/g,""); 2.js去前后空字符串: ...

  5. leetcode python 037 求解数独

    import numpy as npimport syssys.setrecursionlimit(1000) #例如这里设置为一百万 def get1(n):    if n<3:       ...

  6. 展示金额的方法(1元-->1.00元)

    public static String showMoneyByTwoDecimal(String account) { DecimalFormat doubleFormatter = new Dec ...

  7. spring boot 全局配置属性一览

    # =================================================================== # COMMON SPRING BOOT PROPERTIE ...

  8. 最近工作再弄基于bootstrap的定制sass

    封装各种组件如 button table 当然..我只才做完两个. 比如table 抽出很多类以后可以配置的值 还有button 目录结构大致是 scss主要css文件 base和components ...

  9. LoadLibrary 失败的解决

    工作中遇到调用Loadlibrary 偶发失败的问题,不是必现,而且这种错误只是在程序初始化的时候出现,初始化成功后当然不会调用,而初始化也不是经常做的动作,所以查找原因起来比较麻烦,调试过程中发现有 ...

  10. Zabbix增加邮箱后Server宕处理

    zabbix版本:4.1  DB为Mysql 过程: 1,为了增加邮件报警功能,按照网上文章,开始增加发送邮件模块.先停postfix,后安装mailx和sendmail. systemctl lis ...