初始MyBatis(随笔1)

初始MyBatis(随笔1)

框架技术

为什么要学习框架技术:
PTT模板举例:做ppt前, 总是会需要找一些模板, 优点;
1. 不用考虑布局, 排版等问题, 提高了效率;
2. 可以专心于PTT的内容, 使演讲 “质量” 更有保障;
3. 新手也可以实现出很好的 PPT;
框架:也是基于这样的考虑, 当确定使用哪个技术框架后, 就相当于有一个 “半成品” 项目框架, 在编写内部 增删改查代码即可…
1. 不用在考虑公共问题, 框架已经帮我们做好了; 不同公司,不同的人写代码都会有所不同...
2. 可以专心于业务逻辑,保证核心业务逻辑的开发质量;
3. 结构统一,便于学习维护;
4. 框架集成了前人的经验,可以帮助新手写出稳定,性能优良,结构优美的高质量程序;
框架的概念
框架的强大之处不是它可以让你,做什么而是,它不能让你做什么; —————— Rickard Oberg
一千个人心中有一千个哈姆雷特,框架使混乱的东西变大结构化,一千个人可以写出一千种 Servlet+JSP+JavaBean…
主流框架的介绍

  • Spring

    Spring框架是一个开源框架, 轻量级框架; 它使现有的JavaEE 技术更容易使用促进良好的编程习惯, 渗透了JavaEE技术的方方面面。它注意依赖注入容器和 AOP实现存在;还提供了声明式事务,对DAO层支持简化开发功能…
    Spring还可以很方便的与 SpringMvc Sturts2 MyBatis Hibernate 等框架集成使用…
    后续学习

  • SpringMVC

    SpringMVC 是Spring 框架提供的构建Web应用程序的全功能MVC模块, 属于SpringFramework的后续产品。
    是结构最清晰的MVC Model2的实现。并且拥有高度的可配置性,支持多种视图技术,还可以进行定制开发,相当灵活…Spring整合SpringMVC可以说是无缝集成; 是一个高性能的架构模式;

  • MyBatis

    MyBatis是一个优秀的数据持久层框架,在实体类和Sql语句之间建立映射关系; 是一种半自动化的ORM的实现其封装性要低于Hibernate
    性能优异 小巧 简单易学


初始MyBatis(随笔1)_第1张图片

SSM集成框架指的就是 Spring 控制层 +SpringMVC 表现层 +MyBatis 持久层 技术框架 不同框架表示不同的技术领域

MyBatis介绍及环境搭

数据持久化概念
数据持久化是将数据模型 转换成 存储模型 同时可以 存储模式 转换为 数据模型
eg:文件的存储就是,数据读取等数据持久化操作,数据模型可以任何数据结构对象模型, 存储模型也可以是 XML 二进制 …
简介
MyBatis是一个开源的数据持久层框架, 内部封装 JDBC 访问数据库的操作, 支持普通的sql 数据库操作 存储过程 高级映射 , 几乎消除所有的JDBC代码和参数的手工设置以及结果集检索;
MyBatis作为持久层框架,主要思想是将大量的sql语句抛离出来,配置在配置文件中, 实现了Sql 的灵活配置, 这样做的好处是将sql 与程序分离在不修改代码的情况下直接在配置文件中修改Sql 语句;
MyBatis 前身是iBatis 本是Apace 的开源项目; 2013迁移至Github
MyBatis官网 | http://mybatis.org
Github 官网 | http://github.com/mybatis
ORM
ORM(Object/Relational Mapping) 即对象/关系映射,是一种对数据持久化操作;对DAO方法进行SQL映射;
它在对象模型 和 关系型数据库之间建立起对应关系,通过JavaBean对象去操作数据库表中的数据;
基于ORM, MyBatis在对象模型 和 关系型数据库的表之间建立一座桥梁, 通过MyBatis建立SQL关系映射 实现增删改查....
环境搭建
下载Jar包——部署Jar——编写核心配置文件——创建实体类 POJO —(创建接口)—映射文件——测试类实现;

  • 需要的Jar包主要有:
    mysql-connector-java-5.1.0-bin.jar 数据库驱动Jar包
    mybatis-3.2.2.jar MyBatis Jar包目前官网在国内受限制, 可以在官网中下载;
    初始MyBatis(随笔1)_第2张图片

  • 部署Jar
    复制到Web 项目下lib目录下; Myelicpse会自动部署至项目上;

  • 创建MyBatis核心配置文件
    为了方便管理配置文件, 在工程下新建一个 SourceFolder类型的目录 , 目录名称 resources存放配置文件;
    在这里插入图片描述

    一般将文件命名为 mybatis-config.xml 该文件需要配置 MyBatis的参数;

MyBatis-config.xml元素节点是有一定顺序,节点顺序若不安顺序排位那么xml文件会报错。




<configuration>  
	
	
	
	<properties resource="datebase.properties">
		<property name="username" value="root" />
		<property name="password" value="ok" />
	properties>
	
	<settings>
		<setting name="logImpl" value="LOG4J" />  
		
		<setting name="autoMappingBehavior" value="FULL" />
	settings>

	
	<typeAliases>
		
		
		<package name="com.wsm.pojo" />
	typeAliases>	

	<environments default="development">     
		<environment id="development">       
			
			<transactionManager type="JDBC">transactionManager>   
			
			<dataSource type="POOLED">   
				<property name="driver" value="${driver}"/>   
				<property name="url" value="${url}"/>   
				<property name="username" value="${user}"/>   
				<property name="password" value="${password}"/>   
			dataSource> 
		environment>
		
		<environment id="WSM" > 
		....
		environment>
		
	environments>
	
	
	<mappers>
		<mapper resource="指向映射文件 项目路径如果不好找可以,右击文件选择Copy Qualified Name "/>
		<mapper resource="映射文件Mapper.xml" />
	mappers>
configuration>


setting功能:
初始MyBatis(随笔1)_第3张图片
例子:

 
	<settings>  
	<setting name="lazyLoadingEnabled" value="false" />  
	settings>

datebase.properties配置文件

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/数据库
#username=root
#password=ok
#: #表示注释, 注释的不会显示, 配置文件可以和 Mybatis-config.xml 中 < properties > 节点一起使用不会有影响l
#Myelicpse:快速查询类 ctrl+shift+t 输入类名Driver可以查看
log4j.properties配置文件:

log4j.rootLogger=DEBUG,CONSOLE,file
#log4j.rootLogger=ERROR,ROLLING_FILE
log4j.logger.cn.smbms.dao=debug
log4j.logger.com.ibatis=debug 
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug 
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug 
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug 
log4j.logger.java.sql.Connection=debug 
log4j.logger.java.sql.Statement=debug 
log4j.logger.java.sql.PreparedStatement=debug 
log4j.logger.java.sql.ResultSet=debug 
log4j.logger.org.tuckey.web.filters.urlrewrite.UrlRewriteFilter=debug
######################################################################################
# Console Appender  \u65e5\u5fd7\u5728\u63a7\u5236\u8f93\u51fa\u914d\u7f6e
######################################################################################
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=error
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern= [%p] %d %c - %m%n
######################################################################################
# DailyRolling File  \u6bcf\u5929\u4ea7\u751f\u4e00\u4e2a\u65e5\u5fd7\u6587\u4ef6\uff0c\u6587\u4ef6\u540d\u683c\u5f0f:log2009-09-11
######################################################################################
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.DatePattern=yyyy-MM-dd
log4j.appender.file.File=log.log
log4j.appender.file.Append=true
log4j.appender.file.Threshold=error
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-M-d HH:mm:ss}%x[%5p](%F:%L) %m%n
log4j.logger.com.opensymphony.xwork2=error  


  • 创建持久化类(实体类) 及对应的Sql 映射;
    在MyBatis,不需要POJO类名与与数据库表名一致,应为MyBatis是POJO与SQL语句之间的映射机制,一般情况下,保证POJO对象的属性与数据库表的字段一致即可。
    SQL映射文件一般相对于POJO,所以一般采用POJO名称+Mapper的规则命名。当然mapper属于DAO层操作,应该放置dao包下。
    一般命名为 实体类名mapper.xml 映射文件;


<mapper namespace="命名空间:一般引用对应的接口类地址,也可以随便起名,如果面向接口编程则必须要是对应接口的地址引用...">

	
	
	
 	<select id="all" resultType="User"  >
 		SELECT * FROM `smbms_user`
 	select>	
 	
 	 
	<select id="count" resultType="int">
		select count(1) as count from User
	select>
	
 	<insert id="xinzeng" parameterType="map" >
 		INSERT into `smbms_user` values
		(null,#{userCode},#{userName},#{userPassword},1,'1983-10-10','13688889999','北京市东城区前门东大街9号',2,1,'2020-08-18 09:56:31',NULL,NULL);
 	insert>
	
mapper>

上面的文件中的 文档声明指定的是 url..路径, 一般还需要进行环境的配置..
DTD文件引入

MyBatis 两种配置文件:核心配置文件Mybatis-config.xml 和 Sql映射 mapper.xml
这两个配置文件都需要手动引入各自的 DTD文件,mybatis-3-config.dtd | mybatis-3-mapper.dtd
否则在编写配置文件时候,文件元素属性不能自动联想。
MyElicpse配置:
工具栏——window——preferences——输入XML——选择XMLCatalog——单击Add——弹框 Location: FileSystem 选择DTD文件位置——Key 中输入对应的属性;——ok 保存即可;
mybatis-3-config.dtd key属性:-//mybatis.org//DTD Mapper 3.0//EN
mybatis-3-mapper.dtd *key属性:-//mybatis.org//DTD Config 3.0//EN
Myelicpse创建对应xml : New——XML(Basic Templates)——起名,不要直接Finish, Next——选择DTD File——选择Select XML…,在下面XML_CataLog选择对应的Key…

  • 测试类实现
    核心接口和类

    每个MyBatis 应用程序都以一个SqlSessionFactory 对象实例为核心;
    可以根据 XML配置文件或 Configuration类的实例构建 SqlSessionFactoryBulider 对象
    通过 SqlSessionFactoryBuilder 对象,获取 SqlSessionFactory 对象;
    有了 SqlSessionFactory 对象后就可以进行获取 SqlSession 实例,SqlSession 对象中完全包含以数据库为背景的所有sql 操作方法;
    初始MyBatis(随笔1)_第4张图片

因为经常常用所以建议创建一个类专门用于创建 SqlSession的类 MyBatisUtil.Java;

	private static SqlSessionFactory factory;
	//作用:SQLSessionFactory简单理解为SqlSession实例工厂。
	//SqlSession session = sqlSessionFactory.openSession(boolean autoCommit);    true:关闭事务控制(默认) false:开启事务控制
	//如果是 false,则只能查看 赠删改 需要手动提交;  sqlSession.commit();
	//作用域:Application 生命周期与应用的生命周期相同
	//单例模式: 存在于整个应用运行时,并且同时只存在一个对象实例
	// 静态代码块
		static {
			try {// 1.获取mybatis-config.xml文件的输入流   读取XML文件构造方式:
				Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
				//SqlSessionFactoryBuilder 负责构建SqlSessionFactory,并提供多个build方法的重载 常用的有↓
				/*
				build(InputStream inputStream, String environment, Properties properties) 
				build(Reader reader, String environment, Properties properties)
				build(Configuration config)
				配置信息以三种形式提供给SqlSessionFactory的build方法:
				InputStream(字节流)、Reader(字符流)、Configuration(类)
				*/	

				// 2.创建sqlsessionfactory对象,完成对配置文件的读取
				factory = new SqlSessionFactoryBuilder().build(reader);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		// 3.创建SqlSession对象
		//作用:执行持久化操作,类似于JDBC中的Connection提供执行Sql命令所需的所有方法,可以通过Sqlsession实例直接映射到SQL语句。
		// •包含了执行SQL所需的所有方法  select(); update(); insert(); delete(); ...多种重载方法;
		// •对应一次数据库会话,会话结束必须关闭 		•线程级别,不能共享
		//注意:关闭SqlSession非常重要,必须要确保正常关闭,在SqlSession里可以执行多次SQL语句,但一旦关闭了SqlSession就需要重新创建
		public static SqlSession createSqlSession() {
			// 参数false表是开启事务控制,不传参数表示默认为true(为自动提交事务)
			return factory.openSession(false);
		}

		// 关闭Sqlsession对象
		public static void closeSqlSession(SqlSession sqlSession) {
			if (null != sqlSession) {
				sqlSession.close();
			}
		}
核心对象 最佳生命周期 最佳作用域
SqlSessionFactoryBuilder 方法体内 方法体内(局部变量)
SqlSessionFactory 从应用服务启动开始一直到应用服务停止—application 整个应用内
SqlSession 一次请求的有效期 一次请求的有效期内

运行类

public static void main(String[] args) {
		
	}
	
	@Test   //非面向接口形式查询全部;
	public void all(){
		// 获取SqlSession 对象;
		SqlSession session = MyBatisUtil.createSqlSession(); 
		// 根据SqlSession对象的 selectList(); 方法获取对应用户集合; 参数对应 Mapper.xml文件 命名空间.对应sql id;
		List<User> users = session.selectList("com.wsm.dao.UserMapper.all");
		// 关闭...
		MyBatisUtil.closeSqlSession(session);
		
		for (User user : users) {
			System.out.println(user.getId() + "\t" + user.getUserCode() + "\t" + user.getUserName() + "\t" + user.getPhone()
					+ "\t" + user.getAddress());
		}
	};
	@Test  //非面向接口形式查询全部;
	public void add(){
		//新增需要参数, 而且是多个参数,可以使用  对象 或 Map 或 @Param("") 注解...这里使用Map;
		Map<String,Object> map = new HashMap<String, Object>();
		//(null,#{userCode},#{userName},#{userPassword},1,'1983-10-10','13688889999','北京市东城区前门东大街9号',2,1,'2020-08-18 09:56:31',NULL,NULL);
		map.put("userCode","lala");
		map.put("userName","WSM");
		map.put("userPassword","123123");   //根据Sql语句,Map 传对应的 key value; #{xx} 相当于 map.key取对应的value值;
		
		SqlSession session = MyBatisUtil.createSqlSession(); 
		int jg = session.insert("com.wsm.dao.UserMapper.xinzeng",map);  //返回影响行数结果;
		if(jg==1){
			System.out.println("新增成功");
		}else{
			System.out.println("新增失败");
		}
	};	
	@Test
	public void count(){
		SqlSession session = MyBatisUtil.createSqlSession(); 
		int count = session.selectOne("com.wsm.dao.UserMapper.count");  //返回结果;
		MyBatisUtil.closeSqlSession(session);
		System.out.println("总共"+count+"条数据");
	}



	}

这里只是笔记 代码还需多练—— 实例代码MyBatisDemo
笔记还不全后面学习SSM 会继续填补,感谢支持留个心心♥呗~ ^y^

你可能感兴趣的:(SSM,mybatis,java,mysql)