MyDatis

-MyBatis

  1. MyBatis的介绍

MyBatis 是一个支持普通SQL查询,存储过程( Oracle最后一天)和高级映射的优秀持久层框架。
MyBatis 消除了几乎所有的JDBC代码和手工设置参数以及结果集的检索。
MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
MyBatis不能自动创建表,如果能够自动建表,必须自己先准备好建表的sql语句。

  1. MyBatis完成查询
  • 导入相应的9个jar包
  • 准备相应的domain
  1. MyBatis核心配置文件
<!-- 环境们 (很多环境的意思)
	default:默认使用哪一个环境(必需对应一个环境的id)
 -->
<environments default="development">
	<!-- 
		一个环境  id:为这个环境取唯一一个id名称
	-->
	<environment id="development">
		<!--  
			事务管理   type:JDBC(支持事务)/MANAGED(什么都不做)
		-->
		<transactionManager type="JDBC" />
		<!-- 数据源, 连接池  type(POOLED):MyBatis自带的连接池 -->
		<dataSource type="POOLED">
			<!-- 连接数据库的参数 -->
			<property name="driver" value="com.mysql.jdbc.Driver" />
			<property name="url" value="jdbc:mysql:///mydb" />
			<property name="username" value="root" />
			<property name="password" value="admin" />
		</dataSource>
	</environment>
</environments>
<mappers> 
	<mapper resource="cn/itsource/domain/ProductMapper.xml" /> 
</mappers> 
4. MyBatis-Config.xml
<!-- 引入Properties文件 -->
<properties resource="db.properties"></properties>
<environments default="development">
	<environment id="development">
		<transactionManager type="JDBC" />
		<dataSource type="POOLED">
			<!-- 根据key拿到properties中的value值 -->
			<property name="driver" value="${db.driver}" />
			<property name="url" value="${db.url}" />
			<property name="username" value="${db.username}" />
			<property name="password" value="${db.password}" />
		</dataSource>
	</environment>
</environments> 
<mappers>
	<mapper resource="cn/itsource/domain/ProductMapper.xml"/>
</mappers>
5. MyBatis-Config.xml

db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql:///test0303
db.username=root
db.password=admin

6.对象与关系的映射(ORM)

<?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的主要功能就是写sql
	mapper:根
	namespace:命令空间 (用来确定唯一) 以前这个是可以不加的,现在必需加
     namespace的值,规则的:映射文件XxxMapper.xml所在的包+domain类名+Mapper
 -->
<mapper namespace="cn.itsource.mybatis.day1._1_hello.ProductMapper">
	<!-- 
		select : 这里面写查询语句
		id:用来确定这条sql语句的唯一
			   以后我们确定唯一,也就是找sql语句 : namespace +.+ id
			 例: cn.itsource.mybatis.day1._1_hello.ProductMapper.get
		parameterType : 传入的参数类型  long:大Long  _long:小long (具体的对应请参见文档)
		resultType : 结果类型(第一条数据返回的对象类型) 自己的对象一定是全限定类名
	 -->
	<select id="get" parameterType="long" resultType="cn.itsource.domain.Product">
		select * from product where id = #{id}
	</select>
</mapper> 

7.抽取MyBatisUtils

import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MyBatisUtils {
	// 保证SqlSessionFactory是单例
	private static SqlSessionFactory sqlSessionFactory;

	// SqlSessionFactory类似于JPA的EntityManagerFactory,Hibernate的SessionFactory
	// SqlSession 类似于JPA的EntityManager,Hibernate的Session

	static {
		try {
			Reader reader = Resources.getResourceAsReader("MyBatis-Config.xml");
			sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException("解析MyBatis的配置文件或者映射文件出现异常:" + e.getMessage());
		}
	}

	// 对外提供一个类
	public static SqlSession getSession() {
		return sqlSessionFactory.openSession();
	}
}

8.CRUR

  session.insert("cn.ten.domain.productMapper.save",product);
  session.update("cn.ten.domain.productMapper.update",product);
  session.delete("cn.ten.domain.productMapper.delete",id);
  return session.selectOne("cn.ten.domain.productMapper.findOne",id);
  return session.selectList("cn.ten.domain.productMapper.findAll");
  1. MyBatis的使用细节
  • 9.1添加时拿到返回的主键
<!--添加-->
    <!--添加后显示id  useGeneratedKeys="true" keyColumn="id" keyProperty="id"-->
    <insert id="save" parameterType="product" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
        INSERT INTO product (productName,dir_id,salePrice,supplier,brand,cutoff,costPrice)
         VALUES (#{productName},#{dirId},#{salePrice},#{supplier},#{brand},#{cutoff},#{costPrice})
    </insert>
  • 9.2Log4j-------log4j.properties
log4j.properties(日志文件:)
log4j.rootLogger=ERROR, stdout
#log4j.rootLogger=NONE
# 把左边包名改成你自己的包名
log4j.logger.cn.ten=TRACE

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

  • 9.3MyBatis中为一个类取别名
 <!--别名-->
    <typeAliases>
           <!-- <typeAlias alias="product" type="cn.ten.domain.Product"></typeAlias>-->
             <!--包的话  默认了类名-->
            <package name="cn.ten.domain"></package>
    </typeAliases>
  • 9.4列名与属性名不对应的解决方案resultMap
<!--命名空间-->
<mapper namespace="cn.ten.domain.productMapper">
    <!--列名与属性名不对应-->
    <!--id随便取-->
    <resultMap id="productMap" type="product">
            <result column="dir_id" property="dirId"></result>
    </resultMap>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值