mybatis总结(1)

  1. mybatis是一个持久层的框架,支持自定义sql,存储过程,高级映射;几乎消除了所以的jdbc代码;是一个半自动化框架
  2. mybatis开发步骤:
    1. 导包mybatis和mysql驱动
    2. 配置文件
      1. 核心配置文件conf.xml,放在src下,主要配置数据库的连接 加载映射文件
        1. 例子:
          <?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>
      2. 映射文件BookMapper.xml
        1. 例子:
          <?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>
    3. API
      1. SqlSession:会话(应用程序与mybatis)
      2. SqlSessionFactory
      3. SqlSessionFactoryBuilder()
      4. 例子: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();
    4. DAO实现方法:
      1. 一个完整的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();
        • DAO接口+annotation(简单的情况好用)
    5. mybatis中log4j的配置
      1. log4j.properties放置根目录src下
      2. 配置conf.xml的settings
        <settings>
            <setting name="logImpl" value="LOG4J"/>
        </settings>
      3. 导包log4j
      4. 级别:FATAL>ERROR>WARN>DEBUG>INFO(严重性递减)
    6. 别名(放在conf.xml文件的configuration下且environments的上面,不然会报错)
      <typeAliases>
      <package name="com.oracle.vo"/>
      </typeAliases>
    7. 数据库连接池的配置(提升数据库访问性能):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>
    8. 映射文件
      1. 一个mapper文件包含:
        1. insert
          1. id:唯一 对应dao里的方法名
          2. parameterType:参数类型(可不写,建议接口中的参数前加入注解@Param("别名"))
          3. keyProperties:主键属性
          4. useGeneratedKeys:是否使用数据库生成的主键
          5. 子标签selectKey:可以用来生成主键
        2. update
        3. delete
        4. select
          1. id
          2. parameterType:对应dao中的方法的传入的参数的类型
          3. resultType:返回类型(可以通过返回 map(对应dao返回的是list<map<key,value>>) 解决多表连接)
            1. 注:查询全部的书,dao返回的是list<Book>,而resultType仍为book,不是list(同上述map)
          4. statementType
          5. 多表查询、分组查询:map
          6. 模糊查询:#{name},传参前在参数前后各连接一个%
          7. 根据传递的列名排序:${name},注入sql片断(不安全,用户sql注入)
        5. sql(片断):复杂sql语句,避免重用 
        6. resultMap(高级映射;自定义;支持一对多,多对一)
          1. EmpMapper.xml
            1. ​​​​​​​
          2. vo.Emp.java(省略get&set、toString)
          3. vo.Dept.java(省略getter&setter、toString)
            1. ​​​​​​​
          4. BookDao.java(为了方便,使用上个例子的DAO增加一个查询emp方法)
          5. TestBook.java
          6. 控制台输出结果
        7. cache

猜你喜欢

转载自blog.csdn.net/addkai/article/details/81155651
今日推荐