- mybatis是一个持久层的框架,支持自定义sql,存储过程,高级映射;几乎消除了所以的jdbc代码;是一个半自动化框架
- mybatis开发步骤:
- 导包mybatis和mysql驱动
- 配置文件
- 核心配置文件conf.xml,放在src下,主要配置数据库的连接 加载映射文件
- 例子:
<?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> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mytest" /> <property name="username" value="root" /> <property name="password" value="root" /> </dataSource> </environment> </environments> <mappers> <mapper resource="com/oracle/dao/BookMapper.xml" /> </mappers> </configuration>
- 例子:
- 映射文件BookMapper.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="com.oracle.dao.BookDao"> <insert id="save" parameterType="com.oracle.vo.Book"> insert into book values(null,#{name},#{price}) </insert> <select id="getAll" resultType="com.oracle.vo.Book"> select * from book order by price </select> <delete id="delete" parameterType="com.oracle.vo.Book"> delete from book where id=#{id} </delete> </mapper>
- 例子:
- 核心配置文件conf.xml,放在src下,主要配置数据库的连接 加载映射文件
- API
- SqlSession:会话(应用程序与mybatis)
- SqlSessionFactory
- SqlSessionFactoryBuilder()
- 例子:TestBook.java
//创建Factory SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("conf.xml")); //session SqlSession session = factory.openSession(); Book book = new Book(); book.setName("读者"); book.setPrice(55); BookDao dao = session.getMapper(BookDao.class); dao.save(book); session.commit(); // 提交才能产生数据 不提交也会生成主键 session.close();
- DAO实现方法:
- 一个完整的DAO需要一个接口和实现类
- DAO接口+DAO实现类+xml映射文件(不建议使用,麻烦)
- DAO接口+xml映射文件(建议使用)
- 接口名=namespace
- 方法名=id
- 例子:
- 自封装一个生产session的类SessionUtils
public class SessionUtils { private static SqlSessionFactory factory = null; static { try { factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("conf.xml")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static SqlSession openSession() { return factory.openSession(); } }
- session.getMapper() DAO接口跟映射文件关联
SqlSession session = SessionUtils.openSession(); Book book = new Book(); book.setName("读者"); book.setPrice(55); BookDao dao = session.getMapper(BookDao.class); dao.save(book); session.commit(); // 提交才能产生数据 不提交也会生成主键 session.close();
- 自封装一个生产session的类SessionUtils
- DAO接口+annotation(简单的情况好用)
- 一个完整的DAO需要一个接口和实现类
- mybatis中log4j的配置
- log4j.properties放置根目录src下
- 配置conf.xml的settings
<settings> <setting name="logImpl" value="LOG4J"/> </settings>
- 导包log4j
- 级别:FATAL>ERROR>WARN>DEBUG>INFO(严重性递减)
- 别名(放在conf.xml文件的configuration下且environments的上面,不然会报错)
<typeAliases> <package name="com.oracle.vo"/> </typeAliases>
- 数据库连接池的配置(提升数据库访问性能):DBCP,C3P0,druid(阿里)
<dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource>
- 映射文件
- 一个mapper文件包含:
- insert
- id:唯一 对应dao里的方法名
- parameterType:参数类型(可不写,建议接口中的参数前加入注解@Param("别名"))
- keyProperties:主键属性
- useGeneratedKeys:是否使用数据库生成的主键
- 子标签selectKey:可以用来生成主键
- update
- delete
- select
- id
- parameterType:对应dao中的方法的传入的参数的类型
- resultType:返回类型(可以通过返回 map(对应dao返回的是list<map<key,value>>) 解决多表连接)
- 注:查询全部的书,dao返回的是list<Book>,而resultType仍为book,不是list(同上述map)
- statementType
- 多表查询、分组查询:map
- 模糊查询:#{name},传参前在参数前后各连接一个%
- 根据传递的列名排序:${name},注入sql片断(不安全,用户sql注入)
- sql(片断):复杂sql语句,避免重用
- resultMap(高级映射;自定义;支持一对多,多对一)
- EmpMapper.xml
- vo.Emp.java(省略get&set、toString)
- vo.Dept.java(省略getter&setter、toString)
-
- BookDao.java(为了方便,使用上个例子的DAO增加一个查询emp方法)
- TestBook.java
- 控制台输出结果
- EmpMapper.xml
- cache
- insert
- 一个mapper文件包含:
mybatis总结(1)
最新推荐文章于 2024-09-05 19:28:06 发布