javaWeb-MyBatis框架常用知识点详解
2017-10-08 21:46
375 查看
1.如何配置MyBatis中xml文件的提示约束,如图:
![](https://img-blog.csdn.net/20171008213321816?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzY0NDQ1ODU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
2.MyBatis使用的是日志框架,来记录日志,要想查看它底层到底执行的是什么sql语句,得配置日志文件,log4j.properties,放置resources源文件目录中,
3.MyBatis的主配置文件(MyBatis-config.xml名字自拟,应放在resources文件夹中,内容从中文PDF中寻找)讲解:
4.MyBatis的对象映射文件(放置domain中)配置讲解:
5.MyBatis实现CRUD操作的常规步骤:
6.优化操作:
7.MyBatis的中间数据类型,如图:
![](https://img-blog.csdn.net/20171008214254686?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzY0NDQ1ODU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
8.存储时设置属性,对象插入后自动生成id(自动获取生成主键),在对象配置文件的insert标签中添加:
2.MyBatis使用的是日志框架,来记录日志,要想查看它底层到底执行的是什么sql语句,得配置日志文件,log4j.properties,放置resources源文件目录中,
简介: 其中有三个主要的组件:Loggers(记录器),Appenders(输出源)和Layouts(布局): 可简单理解为日志级别/日志要输出的地方/日志以何种形式输出。综合使用这三个组 件可以轻松地记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。
内容: //Loggers记录器:输出错误级别的,标准输出 log4j.rootLogger=ERROR, stdout //打印包cn.itsource中的日志 log4j.logger.cn.itsource=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
3.MyBatis的主配置文件(MyBatis-config.xml名字自拟,应放在resources文件夹中,内容从中文PDF中寻找)讲解:
<?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" /> <!-- 配置连接池(数据源) --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/MyDataBase" /> <property name="username" value="root" /> <property name="password" value="1229341617lq" /> </dataSource> </environment> </environments> <mappers> <!-- 表的配置文件,封装了对表的CRUD操作,最前面不需要加/ --> <mapper resource="com/itcast/oa/domain/ProductMapper.xml" /> </mappers> </configuration>
4.MyBatis的对象映射文件(放置domain中)配置讲解:
<?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/domain+表配置文件名,namespace + id唯一找到sql语句 --> <mapper namespace="com.itcast.oa.mapper.ProductMapper"> <!-- id: 唯一标识,和namespace组成全局唯一标识 resultType: 返回类型(DML操作没有此属性),表中一行记录对应的对象类型 全限定名称 parameterType: 参数类型 parameterMap: 已经废除不用,常用parameterType --> <select id="list" resultType="com.itcast.oa.domain.Product"> SELECT * FROM product </select> <select id="get" resultType="com.itcast.oa.domain.Product" parameterType="long"> SELECT * FROM product WHERE id = #{id} </select> <insert id="save" parameterType="com.itcast.oa.domain.Product" > INSERT INTO product (productName, supplier, salePrice, costPrice, dir_id, cutoff, brand) VALUES (#{productName}, #{supplier}, #{salePrice}, #{costPrice}, #{dir_id}, #{cutoff}, #{brand}) </insert> <delete id="delete" parameterType="long"> DELETE FROM product WHERE id = #{id} </delete> <update id="update" parameterType="com.itcast.oa.domain.Product"> UPDATE product SET productName = #{productName}, brand = #{brand}, costPrice = #{costPrice}, salePrice = #{salePrice}, cutoff = #{cutoff}, supplier=#{supplier}, dir_id = #{dir_id} WHERE id = #{id} </update> </mapper>
5.MyBatis实现CRUD操作的常规步骤:
1.加载MyBatis-config.xml文件,获取SqlSessionFactory对象(线程安全的,运行期间创建一次即可):DataSource 2.使用SqlSessionFactory创建Session对象(线程不安全的,每一个线程中都应该有一份实例对象):Connection 3.使用SqlSession完成CRUD和事务操作(DML操作需要commit提交事务) 4.释放SqlSession
package com.itcast.oa.dao.impl; import java.io.InputStream; import java.util.List; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import com.itcast.oa.dao.IProductDao; import com.itcast.oa.domain.Product; /** * MyBatis常规步骤: * 1.加载MyBatis-config.xml文件,获取SqlSessionFactory对象(线程安全的,运行期间创建一次即可):DataSource * 2.使用SqlSessionFactory创建Session对象(线程不安全的,每一个线程中都应该有一份实例对象):Connection * 3.使用SqlSession完成CRUD和事务操作(DML操作需要commit提交事务) * 4.释放SqlSession */ public class ProductDaoImpl implements IProductDao { @Override public int save(Product obj) { try { SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder() .build(Resources.getResourceAsReader("MyBatis-config.xml")); SqlSession session = sessionFactory.openSession(); int effectRows = session.insert("com.itcast.oa.mapper.ProductMapper.save", obj); session.commit(); session.close(); return effectRows; } catch (Exception e) { e.printStackTrace(); } return 0; } @Override public int delete(Long id) { try { SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder() .build(Resources.getResourceAsReader("MyBatis-config.xml")); SqlSession session = sessionFactory.openSession(); int effectRows = session.delete("com.itcast.oa.mapper.ProductMapper.delete", id); session.commit(); session.close(); return effectRows; } catch (Exception e) { e.printStackTrace(); } return 0; } @Override public int update(Product obj) { try { SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder() .build(Resources.getResourceAsReader("MyBatis-config.xml")); SqlSession session = sessionFactory.openSession(); int effectRows = session.update("com.itcast.oa.mapper.ProductMapper.update", obj); session.commit(); session.close(); return effectRows; } catch (Exception e) { e.printStackTrace(); } return 0; } @Override public Product get(Long id) { try { // 1.利用ibatis中的Resources类,加载来自classPath路径下的主配置文件信息,得到SessionFactory对象 InputStream config = Resources .getResourceAsStream("MyBatis-config.xml"); SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder() .build(config); // 2.通过sessionFactory对象打开session得到SqlSession对象 SqlSession session = sessionFactory.openSession(); // 3.利用sqlSession执行CRUD操作:namespace+id,找到sql语句,并在此设置参数 Product pro = session.selectOne( "com.itcast.oa.mapper.ProductMapper.get", id); // 4.关闭sqlSession资源 session.close(); return pro; } catch (Exception e) { e.printStackTrace(); } return null; } @Override public List<Product> getAll() { try { // 1.利用ibatis中的Resources类,加载来自classPath路径下的主配置文件信息,得到SessionFactory对象 InputStream config = Resources .getResourceAsStream("MyBatis-config.xml"); SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder() .build(config); // 2.通过sessionFactory对象打开session得到SqlSession对象 SqlSession session = sessionFactory.openSession(); // 3.利用sqlSession执行CRUD操作:namespace+id,找到sql语句 List<Product> productList = session .selectList("com.itcast.oa.mapper.ProductMapper.list"); // 4.关闭sqlSession资源 session.close(); return productList; } catch (Exception e) { e.printStackTrace(); } return null; } }
6.优化操作:
6.1:抽取MyBatis工具类MyBatisUtil.java:
package com.itcast.oa.util; 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 enum MyBatisUtil { INSTANCE; private static SqlSessionFactory sessionFactory; static{ try { sessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("MyBatis-config.xml")); } catch (Exception e) { e.printStackTrace(); } } public SqlSession getSession(){ return sessionFactory.openSession(); } } CRUD操作为: package com.itcast.oa.dao.impl; import java.util.List; import org.apache.ibatis.session.SqlSession; import com.itcast.oa.dao.IProductDao; import com.itcast.oa.domain.Product; import com.itcast.oa.util.MyBatisUtil; /** * MyBatis常规步骤: * 1.加载MyBatis-config.xml文件,获取SqlSessionFactory对象(线程安全,运行期间创建一次即可):DataSource * 2.使用SqlSessionFactory创建Session对象(线程不安全的,每一个线程中都应该有一份实例对象):Connection * 3.使用SqlSession完成CRUD和事务操作(DML操作需要commit提交事务) * 4.释放SqlSession */ public class ProductDaoImpl implements IProductDao { @Override public int save(Product obj) { SqlSession session = null; try{ session = MyBatisUtil.INSTANCE.getSession(); int effectRows = session.insert("com.itcast.oa.mapper.ProductMapper.save", obj); session.commit(); return effectRows; }finally{ session.close(); } } @Override public int delete(Long id) { SqlSession session = null; try{ session = MyBatisUtil.INSTANCE.getSession(); int effectRows = session.delete("com.itcast.oa.mapper.ProductMapper.delete", id); session.commit(); return effectRows; }finally{ session.close(); } } @Override public int update(Product obj) { SqlSession session = null; try{ session = MyBatisUtil.INSTANCE.getSession(); int effectRows = session.update("com.itcast.oa.mapper.ProductMapper.update", obj); session.commit(); return effectRows; }finally{ session.close(); } } @Override public Product get(Long id) { SqlSession session = null; try{ session = MyBatisUtil.INSTANCE.getSession(); Product pro = session.selectOne( "com.itcast.oa.mapper.ProductMapper.get", id); return pro; }finally{ session.close(); } } @Override public List<Product> getAll() { SqlSession session = null; try{ session = MyBatisUtil.INSTANCE.getSession(); List<Product> productList = session .selectList("com.itcast.oa.mapper.ProductMapper.list"); return productList; }finally{ session.close(); } } }
6.2:抽取db.properties文件(放置resources源文件夹中):
driverClassName=com.mysql.jdbc.Driver uri=jdbc:mysql://localhost:3306/MyDataBase username=root password=1229341617lq 主配置文件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> <!-- 引入db.properties文件中的数据库配置信息 --> <properties resource="db.properties" /> <!-- 环境配置 --> <environments default="development"> <!-- 连接数据库的基本信息配置 --> <environment id="development"> <!-- 事务管理器:JDBC的管理机制 --> <transactionManager type="JDBC" /> <!-- 配置连接池(数据源) --> <dataSource type="POOLED"> <property name="driver" value="${driverClassName}" /> <property name="url" value="${uri}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> </dataSource> </environment> </environments> <mappers> <!-- 表的配置文件,封装了对表的CRUD操作,最前面不需要加/ --> <mapper resource="com/itcast/oa/domain/ProductMapper.xml" /> </mappers> </configuration>
6.3:在主配置文件中配置类型别名:
<typeAliases> <typeAlias type="com.itcast.oa.domain.Product" alias="Product"/> </typeAliases> 此时对象配置文件为: <?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/domain+表配置文件名,namespace + id唯一找到sql语句 --> <mapper namespace="com.itcast.oa.mapper.ProductMapper"> <!-- id : 唯一标识,和namespace组成全局唯一标识 resultType : 返回类型(DML操作没有此属性),表中一行记录对应的对象类型 全限定名称 parameterType: 参数类型 --> <select id="list" resultType="Product"> SELECT * FROM product </select> <select id="get" resultType="Product" parameterType="long"> SELECT * FROM product WHERE id = #{id} </select> <insert id="save" parameterType="Product" > INSERT INTO product (productName, supplier, salePrice, costPrice, dir_id, cutoff, brand) VALUES (#{productName}, #{supplier}, #{salePrice}, #{costPrice}, #{dir_id}, #{cutoff}, #{brand}) </insert> <delete id="delete" parameterType="long"> DELETE FROM product WHERE id = #{id} </delete> <update id="update" parameterType="Product"> UPDATE product SET productName = #{productName}, brand = #{brand}, costPrice = #{costPrice}, salePrice = #{salePrice}, cutoff = #{cutoff}, supplier=#{supplier}, dir_id = #{dir_id} WHERE id = #{id} </update> </mapper>
6.4:当对象得属性名和数据库中的列名不同时,可用resultMap配置,在对象配置文件中:
<resultMap type="Product"(类型别名) id="ProductMapping"> <!-- 映射主键列 --> <id property="id" column="id" /> <!-- 映射非主键列,其他属性和列名相同的可省略不配 --> <result property="productname" column="productName" /> </resultMap> 对象配置文件为: <?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/domain+表配置文件名,namespace + id唯一找到sql语句 --> <mapper namespace="com.itcast.oa.mapper.ProductMapper"> <!-- id : 唯一标识,和namespace组成全局唯一标识 resultType : 返回类型(DML操作没有此属性),表中一行记录对应的对象类型 全限定名称 parameterType: 参数类型 --> <select id="list" resultType="ProductMapping"> SELECT * FROM product </select> <select id="get" resultType="ProductMapping" parameterType="long"> SELECT * FROM product WHERE id = #{id} </select> <insert id="save" parameterType="Product" > INSERT INTO product (productName, supplier, salePrice, costPrice, dir_id, cutoff, brand) VALUES (#{productName}, #{supplier}, #{salePrice}, #{costPrice}, #{dir_id}, #{cutoff}, #{brand}) </insert> <delete id="delete" parameterType="long"> DELETE FROM product WHERE id = #{id} </delete> <update id="update" parameterType="Product"> UPDATE product SET productName = #{productName}, brand = #{brand}, costPrice = #{costPrice}, salePrice = #{salePrice}, cutoff = #{cutoff}, supplier=#{supplier}, dir_id = #{dir_id} WHERE id = #{id} </update> <resultMap type="Product" id="ProductMapping"> <!-- 映射主键列 --> <id property="id" column="id" /> <!-- 映射非主键列 --> <result property="productname" column="productName" /> </resultMap> </mapper>
7.MyBatis的中间数据类型,如图:
8.存储时设置属性,对象插入后自动生成id(自动获取生成主键),在对象配置文件的insert标签中添加:
useGeneratedKeys=”true” keyProperty=”id”
相关文章推荐
- JAVAWEB开发之SpringMVC详解(一)——SpringMVC的框架原理、架构简介、与mybatis整合和注解方式的使用、
- JAVAWEB开发之SpringMVC详解(一)——SpringMVC的框架原理、架构简介、与mybatis整合和注解方式的使用、
- JAVA常用集合框架用法详解——基础篇
- JAVA常用集合框架用法详解——提高篇
- JavaWeb开发基于Spring和mybatis框架(学习日志)
- JAVA常用集合框架用法详解基础篇一之Colletion接口
- 集成框架 javaweb开发平台ssmy_m(生成代码) java struts2 mybatis spring maven jquery
- JavaWeb前端到后端常用框架、插件
- 详解Java的MyBatis框架中SQL语句映射部分的编写
- 详解Java的MyBatis框架和Spring框架的整合运用
- JAVA常用集合框架用法详解基础篇二之Colletion子接口List
- 详解Java的MyBatis框架中的事务处理
- 常用的Java Web框架简介
- Java Web前端到后台常用框架介绍
- Java程序员最常用Web框架
- javaweb-------mybatis框架的入门知识讲解
- JavaWeb---框架SpringMvc+Mybatis开发项目第三季(共三季)
- 详解Java的MyBatis框架中SQL语句映射部分的编写
- Java web常用知识点
- 详解Java的MyBatis框架中动态SQL的基本用法