mybatis01
Mybatis
介绍:
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。
MyBatis框架:
SqlMapConfig.xml: MyBatis核心配置文件
Mapper.xml:一个表对应一个Mapper,写sql语句
由SqlSeaaion执行sql语句,通过SqlSessionFactory得到对象
- 在src下new一个File文件 名:log4j.properties 复制代码:
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
mybatis默认使用log4j作为输出日志信息。
- src下new一个xml文件 名: SqlMapConfig.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">
<configuration>
<!-- 和spring整合后 environments配置将废除 -->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理 -->
<transactionManager type="JDBC" />
<!-- 数据库连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
</configuration>
修改库名和密码
- 创建pojo
pojo类作为mybatis进行sql映射使用,pojo类通常与数据库表对应,(表的实体类)
- 创建sql映射文件xml
一个表对应一个xml
<?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=””></mapper>//namespace属性,相当于包名的作用,用来区分(写所对应的接口的路径 com.oracle.mapper.userpammer)
查询:
<select>直接写sql语句</select>
新增:
<insert></insert>
删除:
<delete></delete>
修改:
<update></update>
属性:
Id:方法名
parameterType="传入类型" resultType="返回类型(自定义类型需要写完整的包名加类名,如果返回个集合写集合的泛型)"
占位符:#{形参}:
通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换。#{}可以有效防止sql注入。 #{}可以接收简单类型值或pojo属性值。 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。
如果是传入一个自定义类,占位符的形参需跟自定义类的变量名相同
字符串拼接:${value}:
通过${}可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换, ${}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${}括号中只能是value。
- xml需在总配置文件SqlMapConfig.xml中配置
<mappers>
<mapper resource=”com/oracle/mapper/user.xml(xml所在地路径)”/>
</mappers>
- 测试:
查询:
//加载配置文件
String path="SqlMapConfig.xml";
InputStream in= Resources.getResourceAsStream(path);
//获取SqlSessionFactory
SqlSessionFactory fac=new SqlSessionFactoryBuilder().build(in);
//获取SqlSession对象
SqlSession sqlsession=fac.openSession();
返回值=Sqlsession.SelectOne(“namespace名.方法名”,传入实参)
//SelectOne() :获取单条数据
//SelectList() :获取一个集合
新增:
//获取SqlSession对象
SqlSession sqlsession=fac.openSession();
sqlsession.insert("namespace名.方法名",user);//自己创建一个user对象并传入值
//手动提交
//增删改都需要手动提交
sqlsession.commit();
动态代理方式:
Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法
Mapper接口开发需要遵循以下规范:
1、 Mapper.xml文件中的namespace与mapper接口的类路径相同。
2、 Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
3、 Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同
4、 Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
创建接口:
需在表所对应的mapper.xml同路径下new一个接口 ,名跟xml名一样
在写方法时,方法、传入参数、返回值都要与对应的xml中的相同//接口,只有方法声明
SqlMapConfig.xml中改为:
<mappers>
<mapper class=”不再是xml路径,改为接口的路径”/>
</mappers>
//加载配置文件
String path="SqlMapConfig.xml";
InputStream in= Resources.getResourceAsStream(path);
//获取SqlSessionFactory
SqlSessionFactory fac=new SqlSessionFactoryBuilder().build(in);
//获取SqlSession对象
SqlSession sqlsession=fac.openSession();
//获取动态代理对象(实现类对象)
接口名 usermapper=sqlsession.getMapper(接口名.class);
返回值=usermapper.方法(参数);
SqlMapConfig.xml配置文件:
properties():
src下创建db.properties配置文件
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
username=root
password=123456
在SqlMapConfig.xml中引入配置文件:
<configuration>下:
<properties resource="db.properties"></properties>
原改为:
<!-- 和spring整合后 environments配置将废除 -->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理 -->
<transactionManager type="JDBC"/>
<!-- 数据库连接池 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url"
value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
typeAliases:给类配别名
<typeAliases>
<!-- <typeAlias type="com.oracle.pojo.User(完整的包名加类名,不区分 大小写)"alias="User"/> -->
<!-- 给包设别名 -->
<package name="com.oracle.pojo"/>
</typeAliases>
mappers:映射器
包下的所有接口全部配合
<mappers>
<package name="com.oracle.pojo(包名)"/>
</mappers>