2
MyBatis:JAVAB编写的持久层,半自动orm框架(object relation mapper简称orm),封装了JDBC操作的很多细节,使开发者只需要关注sql语句本身,而无需关注注册驱动,创建连接等繁杂的过程,并使用orm思想实现了结果集的封装
orm对象关系映射:将数据库表和实体类,及实体类的属性结合起来,让我们可以操作实体类就实现操作数据库表
orm: 数据库——表格——行row 称为一个实体entity 和 java——Class类——object对象 形成一个映射
Hibernate:全自动的orm框架,通过实体类对象自动映射SQL语句和参数注入
Mybatis的SQL注入有两种方式:
1. 注解: 简单SQL语句
[映射Mapper方法注解]
@Insert(String sql) :
范例:第一个加粗cmmName是数据库表字段名称列表,第二个加粗cmmName是实体类属性名称列表
@Insert("Insert into cpmmpdity(cmmName, cmmType, cmmPrice) values (#(cmmName),#(cmmTtpe),#(cmmPrice))")
int addCmm(Commodity cmm);
@Delete(String sql):
@Update(String sql):
@Select(String sql):
[Mpaaer方法参数注解]多个参数时使用
@Param(String ParameterName)
@Update("update commodity set cmmName=#{cmmName} where cmmId=#{cmmId}")
int modifyNameById(@Param("cmmName") String cmmName,@Param("cmmId") String cmmId);
}
2. XML配置(复杂SQL)
动态SQL
<forEach collection="array|list|map" item="obj" open="openSogn" seperator="seperatorBetween" close="closeSign">
</forEach>
<choose>
<when test="">...</when>
<when test="">...</when>
<otherwise></otherwise>
</choose>
<if test="">...</if>
<where></where>
mysql默认字符串值查询时不区分大小写
若需要大小写敏感:
a. 修改字符集:utf8_bin
b. 建表时
创建mybatis项目
1. 在idea系统创建project,于maven下选择quickstart创建,导入mybatis,mysql-connection-java,log4j共3个jar包至project中
2. 在src/main下,新建resources目录,并在此目录下添加核心配置文件,mybatis-config.xml,通用格式如下
<?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">
<!-- 通过这个配置文件完成mybatis与数据库的连接 -->
<configuration>
<!-- 引入 database.properties 文件-->
<properties resource="database.properties"/>
<environments default="development">
<environment id="development">
<!--配置事务管理,采用JDBC的事务管理 -->
<transactionManager type="JDBC"/>
<!-- POOLED:mybatis自带的数据源,JNDI:基于tomcat的数据源 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!-- 将mapper文件加入到配置文件中 -->
<mappers>
<!--<mapper resource="com/xxx/dao/employeeMapper.xml"/>-->
<mapper resource="mapper/ProviderMapper.xml"/>
</mappers>
</configuration>
3. 相同位置,创建好database.properties,写入JDBC的四大金刚
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false
user=root
password=root
//url中定位到数据库名称,test是博主的数据库
//?useUnicode=true&characterEncoding=utf-8&useSSL=false必加,不然易于报错ssl
4. 在src/main/java下,新建utils文件夹,并在目录下创建数据库的工具类,该类用于通过SqlSessionFactory获取SqlSession实例,而SqlSession完全包含了面向数据库执行sql命令所需的所有方法
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 java.io.IOException;
import java.io.InputStream;
public class mybatiUtil {
private static SqlSessionFactory factory;
static{
try {
//获取sqlsessionfactory对象
String resource= "mybatis-config.xml";
InputStream is = Resources.getResourceAsStream(resource);
factory=new SqlSessionFactoryBuilder().build(is);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSession(){
return factory.openSession();
}
}
4. 写代码——创建实体类,Dao接口,接口实现类
实体类——POJO类可以简单理解为符合JavaBean规范的实体类,也就是说,我们想要使用数据库的哪张表格,就用其创建实体类,类名与表名一致/不一致均可,属性建议与表的字段名一致,避免后期重命名工作,JavaBean对象的状态保存在属性中,访问属性必须通过对于的getter和setter方法,记得创建有参和无参方法,toSting,不附截屏
Dao接口
package com.xxx.dao;
import com.xxx.pojo.employee;
import java.util.List;
public interface employeeDao {
List<employee> getEmployeeList();
}
接口实现类——由原来的employeeDaoImpl转换为一个mapper配置文件,SQL映射文件用于与POJO实体类映射,通常格式是类名Mapper.xml,该文件属于DAO层的操作,应放在DAO包下,格式代码如下
<?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">
//namespace 绑定一个对应的DAO/mapper接口
<mapper namespace="com.xxx.dao.employeeDao">
<!-- id对应dao接口方法的名字,相当于重写,resultType表示sql语句返回值类型,相当于原JDBC得到的Resultset结果集进行封装,要写全类名 -->
//#{id} 从传递过来的参数中取出Id值
<select id="getEmployeeList" resultType="com.xxx.pojo.employee">
select * from employee
</select>
</mapper>
5. 测试
package com.xxx.dao;
import com.xxx.pojo.employee;
import com.xxx.utils.mybatiUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class employeeDaoTest {
@Test
public void test(){
SqlSession sqlSession=mybatiUtil.getSqlSession();
employeeDao e = sqlSession.getMapper(employeeDao.class);
List<employee> a=e.getEmployeeList();
for(employee b:a){
System.out.println(b);
}
sqlSession.close();
}
}
典型的maven工程中,目录结构有:
src/main/java存放java源代码,默认的情况下,Maven打包的时候,对于src/main/java目录只打包源代码,而不会打包其他文件
src/main/resources存放资源文件(各种xml,properites等),比如配置文件,Maven 打包时能把这些资源文件打包到相应的jar或者war里
由于 IDEA 默认只编译 resources 路径下的 mapper.xml ,如果放在其他位置编译之后会丢失这部分内容,如果就想放在其他位置需要在 pom.xml 文件加如下配置信息:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>