MyBatis框架总结

–1、介绍
-1、框架(Framwork)是一个提供了可重要的公共结构的半成品
-2、mybatis介绍:mybatis前身是ibatis,是Apache旗下的一个开源项目 之前学的Apache旗下的tomcat
-3、mybatis作用:对jdbc进行封装,简化了jdbc的代码,实现通过ROM来完成对数据库的操作
-4、ORM:对象关系映射 对象指的是java实体类创建的对 关系指的是关系型数据库 映射指的是实体类中的属性和数据库表中的字段的映射
查询功能:不需要用ResultSet来处理结果集 而且mybatis框架帮我们做好他们之间对应关系
-5、官网:
1.mybatis官网:http://mybatis.org
2.Gutgyb官网:https://github.com/mybatis

–2、MyBatis的优缺点

-1、优点:
	与jdbc相比,减少了50%以上的代码量
	最简单的持久化框架,小巧并简单易学
	SQL代码从程序代码中彻底分离,可重用
	通过XML标签,支持编写动态SQL
	通过映射标签,支持对象与数据库的ORM字段映射
	
-2、缺点: M
	SQL语句编写工作量大,对开发人员有一定要求
	数据库移植性差(不同数据库之间的切换,因为不同的接口,他们的SQL语法有些不同)

MyBatis专注于SQL本身,是一个只够灵活的DAO层解决方案,适用于性能要求较高或者需求多变的互联网项目

–3、mybatis开发环境搭建 连接数据库,对数据进行操作 对jdbc进行进行封装

 -1、创建web项目

-2、在 WebRoot——>WEB-INF——>lib 中导入mybatis的依赖jar包和mysql的驱动依赖jar包,并build path一下
	mybatis-3.2.2.jar
	mysql-connector-java-5.1.0-bin.jar

-3、创建一个util工具包	来创建连接数据库使用的SqlSession会话
	代码:
		//创建sqlsessionfactory   在创建sqlsession
		public static SqlSessionFactory factory;//跟application作用范围一样 整个程序
			//静态代码块 只执行一次
			static{
				System.out.println("===== static factory ======");
				try {
					//读取全局配置文件 
					Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
					//创建session工厂
					factory = new SqlSessionFactoryBuilder().build(reader);
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			/**
			 * 获取session
			 * @return
			 */
			public static SqlSession createSqlSession(){
				return factory.openSession();
			}
			/**
			 * 关闭session
			 * @param session
			 */
			public static void closeSqlSession(SqlSession session){
				if (null!=session) {
					session.close();
				}
			}
		

-4、在src中创建mybatis的全局配置文件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">
		<configuration>
			<!-- 配置连接数据库的环境 -->
			<environments default="development">
				<environment id="development">
					<!--配置事务管理,采用JDBC的事务管理  -->
					<transactionManager type="JDBC"></transactionManager>
					<!-- POOLED:mybatis自带的数据源,JNDI:基于tomcat的数据源 -->
					<dataSource type="POOLED">
						<property name="driver" value="com.mysql.jdbc.Driver"/>
						<property name="url" value="jdbc:mysql://localhost/petdatabase"/>
						<property name="username" value="root"/>
						<property name="password" value="root"/>
					</dataSource>
				</environment>
			</environments>
			
			<mappers>
				<mapper resource="com.accp.dao/UserMapper.xml"/>
			</mappers>
		</configuration>

-5、创建entity包来存放实体类	来创建一张表写入属性并生成setter/getter方法和tostring方法

-6、dao层接口及实现类  sql映射文件
	UserMapper.java接口
	
		代码:
			public List<User> findAll();
	UserMapper.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">
			<!-- namespace:命名空间 用来指定接口文件 -->
			<mapper namespace="com.accp.dao.UserMapper">
				<!-- 查询所有用户信息 -->
				<select id="findAll" resultType="com.accp.entity.User">
					select * from `user`
				</select>
			</mapper>
			
	UserMapperImpl.java创建
	如果是增加要写提交事假  把数据保存到数据库 在异常里写入回滚
		//提交事务
		session.commit();
		//回滚
		session.rollback();
	
		代码:
			SqlSession session;//相当于jdbc中的connection
			@Override
			public List<User> findAll() {
				// TODO Auto-generated method stub
				//获取session对象
				try {
					session = MybatisUtil.createSqlSession();
					List<User> list = session.getMapper(UserMapper.class).findAll();
					return list;
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
					return null;
				}finally{
					MybatisUtil.closeSqlSession(session);
				}
			}

-7、把sql映射文件配置到mybatis的全局配置文件

-8、编写测试类进行测试

–4、mybatis工作原理
1、先读取全局配置文件mybatis-config.xml
2、由SqlSessionFactoryBuilder类的build方法来创建SqlSessionFactory(session工厂)
3、有SqlSessionFactory来创建SqlSession(sql会话 来执行sql语句)
4、session会话会根据Mapper.xml(sql映射文件)调用相应的sql语句

–5、介绍
-1、MyBatis真正强大之处就在于SQL映射文件,也是它的魅力所在。

–6、SQL映射文件的几个顶级元素配置:
-1、mapper:映射文件的更元素节点,只有一个属性namespace(命名空间),其作用如下:
1.用于区分不同的mapper,全局唯一
2.绑定DAO接口,即面向接口编程。当namespace绑定某一接口之后,可以不用写该接口的实现类,mybatis会通过接口的完整限定名查找到对应的mapper配置来执行SQL语句。因此namespace的命名必须要跟接口同名。
-2、cache:配置给定命名空间的缓存。
-3、cache-ref:从其他命名空间引用缓存配置
-4、resultMap:用来描述数据库结果集和对象的对应关系
-5、sql:可以重用的SQL块,也可以被其他语句引用。
-6、insert:映射插入语句
-7、update:映射更新语句
-8、delete:映射删除语句
-9、select:映射查询语句

–7、resultMap应用场景:
1.实体类中的属性和数据库表字段名不一致 使用resultMap自己去写映射关系
2.复杂联合查询

–8、select标签中的resultMap和resultType两个属性只能用一个
-1、什么时候使用resultType:
1.当查询结果符合值是基本数据类型 比如 int String Date等
2.当返回数据类型是跟实体类进行映射 然后字段名和属性名一致, 前提mybatis全局配置文件开启自动映射
-2、什么时候使用resultMap:
1.mybatis全局配置文件关闭了自动映射
2.字段名和属性名不一致
3.需要在resultMap标签来自映射关系

–9、在mybatis映射文件中书写sql where语句经常会用到大于小于号,如果直接用大于小于号就会报错

-1、解决办法1:
xml特殊字符可以适用转义字符代替
  &lt;     <     小于号                                          

  &gt;     >     大于号

  &amp;    &     和

  &apos;   ’     单引号

  &quot;   "     双引号

 
-2、解决办法2:
   适用 <![CDATA[  ]]>节,将sql包括起来,在两者之间嵌入不想被解析程序解析的原始数据,解析器不对CDATA区中的内容进行解析,而是将这些数据原封不动地交给下游程序处理。

	例如:	SELECT * FROM studentinfo WHERE 
			<![CDATA[ sage > #{startAge} and sage < #{endAge}  ]]>

–10、使用@Param注解实现多参数入参
例:
public int updatePwd(@Param(“id”)Integer id,@Param(“pwd”)String pwd);

–11、${参数名} #{参数名} 区别:
$:字符串替换 一般用来传递表名或者字段名 直接拼接到sql语句当中
#:参数值替换 用来传递参数值 通过?占位符来进行参数替换

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值