MyBatis 是一款优秀的持久层框架,一个半 ORM(对象关系映射)框架
ORM(Object Relational Mapping),对象关系映射
是一种为了解决关系型数据库数据与简单Java对象(POJO)的映射关系的技术。
简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,
将程序中的对象自动持久化到关系型数据库中。
半自动ORM:在查询关联对象或关联集合对象时,需要手动编写sql来完成(Mybatis)
全自动的ORM:查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取(Hibernate)
mysql
mysql-connector-java
5.1.10
org.mybatis
mybatis
3.4.6
org.projectlombok
lombok
1.18.12
provided
junit
junit
4.10
test
public interface IEmploy {
public UserMy getUserId(Integer id);
}
<select resultType="com.xinzhi.mybatis.dao.IEmploy" id="getUserId">
select id ,name ,age ,skill,password from user whereid = #{id}
select>
resultType 返回值类型
parameterType 参数类型
id 接口方法名
#{ } 表示占位符 ‘ ? ’,传入参数
db.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8
db.user=root
db.password=root
db.driver=com.mysql.jdbc.Driver
作用:用注解来简化xml配置的时候(比如Mybatis的Mapper.xml中的sql参数引入)@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中(一般通过#{}的方式,${}会有sql注入的问题)
例:public void a(@Param(“id”)int id,@Param(”name“) String name);
#{key}:获取参数的值,预编译到 SQL 中。安全。
${key}:获取参数的值,拼接到 SQL 中。有 SQL 注入问题.ORDER BY ${name}
一对多、一的一时,集合属性用collection标签
多对一时是association标签
其中ofType属性是类的全路径(多对一时是javaType属性),在collection标签内添加result子标签来描述集合存储的类的属性和列名的映射关系
自定义 resultMap,实现高级结果集映射
id :用于完成主键值的映射
column:数据库的列名 property:列结果对应的java属性
result :用于完成普通列的映射
association :定义关联的对象分装规则(多对一,一对一)
javaType:是一个java类的全类名
collection : 复杂类型的集(一对多)
动态 SQL 是 MyBatis 强大特性之一。极大的简化我们拼装 SQL 的操作
1.if where
If 用于完成简单的判断.
Where 用于解决 SQL 语句中 where 关键字以及条件中第一个 and 或者 or 的问题
2.trim
prefix: 添加前缀
prefixOverrides: 去掉前缀
suffix: 添加后缀
suffixOverrides: 去掉后缀
3.set
4.choose(when、otherwise)
5.foreach
foreach 主要用户循环迭代
collection: 要迭代的集合
item: 当前从集合中迭代出的元素
open: 开始字符
close:结束字符
separator: 元素与元素之间的分隔符
index:
迭代的是 List 集合: index 表示的当前元素的下标
迭代的 Map 集合: index 表示的当前元素的 key
6.sql
// junit
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
// mybatis
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
// mysql-connector-java
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
// spring相关
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.10.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.10.RELEASE</version>
</dependency>
// aspectJ AOP 织入器
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
// mybatis-spring整合包 【重点】
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.2</version>
</dependency>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- <context:component-scan base-package="cn.service"/> -->
<context:component-scan base-package="cn.xinzhi.dao, cn.xinzhi.service.impl"/>
<!-- 读取数据库配置文件 -->
<context:property-placeholder location="classpath:database.properties"/>
<!-- JNDI获取数据源(使用dbcp连接池) -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" scope="singleton">
<property name="driverClassName" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${user}" />
<property name="password" value="${password}" />
<property name="initialSize" value="${initialSize}"/>
<property name="maxActive" value="${maxActive}"/>
<property name="maxIdle" value="${maxIdle}"/>
<property name="minIdle" value="${minIdle}"/>
<property name="maxWait" value="${maxWait}"/>
<property name="removeAbandonedTimeout" value="${removeAbandonedTimeout}"/>
<property name="removeAbandoned" value="${removeAbandoned}"/>
<!-- sql 心跳 -->
<property name= "testWhileIdle" value="true"/>
<property name= "testOnBorrow" value="false"/>
<property name= "testOnReturn" value="false"/>
<property name= "validationQuery" value="select 1"/>
<property name= "timeBetweenEvictionRunsMillis" value="60000"/>
<property name= "numTestsPerEvictionRun" value="${maxActive}"/>
</bean>
<!-- 事务管理 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 配置mybitas SqlSessionFactoryBean-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations" value="classpath:cn/xinzhi/dao/*.xml"></property>
<property name="typeAliasesPackage" value="cn.xinzhi.entity"></property>
</bean>
<!-- AOP 事务处理 开始 -->
<aop:config proxy-target-class="true">
<aop:pointcut expression="execution(* cn.xinzhi.service.impl..*(..))" id="transService"/>
<aop:advisor pointcut-ref="transService" advice-ref="txAdvice" />
</aop:config>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" rollback-for="Exception" />
<tx:method name="set*" propagation="REQUIRED" rollback-for="Exception" />
<tx:method name="update*" propagation="REQUIRED" rollback-for="Exception" />
<tx:method name="change*" propagation="REQUIRED" rollback-for="Exception" />
<tx:method name="del*" propagation="REQUIRED" rollback-for="Exception" />
<tx:method name="get*" propagation="REQUIRED" rollback-for="Exception" />
<tx:method name="search*" propagation="REQUIRED" rollback-for="Exception" />
</tx:attributes>
</tx:advice>
<!-- AOP 事务处理 结束 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cn.xinzhi.dao" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
</beans>
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8
user=root
password=root
minIdle=45
maxIdle=50
initialSize=5
maxActive=100
maxWait=100
removeAbandonedTimeout=180
removeAbandoned=true