Mybatis入门附电商项目迭代

Mybatis

环境:

  • JDK1.8
  • Mysql5.1
  • maven 3.5.5
  • eclipse

回顾:

  • JDBC
  • Mysql
  • Java基础
  • maven

简介

1.1 什么是Mybatis?

Mybatis入门附电商项目迭代_第1张图片

  • MyBatis 是一款优秀的持久层框架
  • 它支持自定义 SQL、存储过程以及高级映射。
  • MyBatis免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
  • MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
  • MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。
  • 2013年11月迁移到Github。

如何获得MyBatis?

  • maven仓库

    
    <dependency>
        <groupId>org.mybatisgroupId>
        <artifactId>mybatisartifactId>
        <version>3.5.5version>
    dependency>
    
    

    点击这里

  • Github

  • Mybatis官方文档 : http://www.mybatis.org/mybatis-3/zh/index.html

  • 点击这里跳转

  • GitHub : https://github.com/mybatis/mybatis-3

  • 点击这里跳转

1.2 持久化

数据持久化

持久化是将程序数据在持久状态和瞬时状态间转换的机制

  • 即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、XML数据文件中等等。
  • JDBC就是一种持久化机制。文件IO也是一种持久化机制。
  • 在生活中 : 将鲜肉冷藏,吃的时候再解冻的方法也是。将水果做成罐头的方法也是。

为什么需要持久化服务呢?那是由于内存本身的缺陷引起的

  • 有一些对象,不能让他丢失。

  • 内存断电后数据会丢失**(断电即失瞬时状态)**。

  • 内存过于昂贵,而且维持成本也高,至少需要一直供电吧。

1.3 持久层

什么是持久层?

Dao层 Service层 Controller层…

  • 完成持久化工作的代码块 。
  • 层界限十分明显。

1. 4 为什么要用Mybatis?

  • 帮助程序员讲数据存入到数据库中

  • 方便

  • 传统JDBC代码太过于复杂。简化。框架。自动化。

  • 容易上手

  • 优点

    • 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。

    • 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。

    • 解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。

    • 提供映射标签,支持对象与数据库的orm字段关系映射

    • 提供对象关系映射标签,支持对象关系组建维护

    • 提供xml标签,支持编写动态sql。

电商项目迭代--------Mybatis

思路流程:搭建环境–>导入Mybatis—>编写代码—>测试

  1. 搭建环境:在Mysql数据库中已经完成对表的创建以及插入了一些测试数据。
  2. 导入Mybatis,直接把jar包拖入lib目录
    Mybatis入门附电商项目迭代_第2张图片

(特别注意,此处也要导log4j入包,并完成log4j.properties相关配置,方便做测试)

Mybatis入门附电商项目迭代_第3张图片

log4j.properties相关配置

#log level: off fatal error warn info debug all
log4j.rootCategory=debug,con

#log to console
log4j.appender.con=org.apache.log4j.ConsoleAppender
log4j.appender.con.layout=org.apache.log4j.PatternLayout
log4j.appender.con.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %c:%L %m%n 

#log to file
#log4j.appender.proj=org.apache.log4j.DailyRollingFileAppender     
#log4j.appender.proj.File=c:/temp/proj.log     
#log4j.appender.proj.layout=org.apache.log4j.PatternLayout     
#log4j.appender.proj.layout.ConversionPattern=%d-[TS] %p %t %c:%L - %m%n   

 
  1. 编写MyBatis核心配置文件 mybatis-cfg.xml (名字随意名命名)

    可查看官服文档-谷歌浏览器经常打不开



<configuration>
	<environments default="dev">
		<environment id="dev">
			
			<transactionManager type="JDBC" />
			
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver"/>	
				<property name="url" 
                    value="jdbc:mysql://localhost:3306/eshop?useUnicode=true&characterEncoding=utf8"/>
				<property name="username" value="root"/>
				<property name="password" value="root"/>
			dataSource>
		environment>
	environments>
	
	<mappers>
		<mapper resource="org/lanqiao/eshop/mapper/YhbMapper.xml"/>
	mappers>
configuration>
  1. 编写Mapper.xml配置文件
    • namespace 十分重要,不能写错!


<mapper namespace="org.lanqiao.eshop.mapper.YhbMapper">
	<insert id="add" parameterType="org.lanqiao.eshop.entity.Yhb">
		insert into yhb(yhbh,yhm,pwd,yhnc,yhsf,sex,yhtx,sjh,email,zcsj)
		values(#{yhbh},#{yhm},#{pwd},#{yhnc},#{yhsf},#{sex},#{yhtx},#{sjh},#{email},#{zcsj})
	insert>
	
	<delete id="deleteById">
		delete from yhb where yhbh = #{yhbh}
	delete>
	
	<update id="update">
		update yhb set yhm = 'libai';
	update>
	
	<select id="selectById" resultType="org.lanqiao.eshop.entity.Yhb">
		select * from yhb where yhbh = #{yhbh}
	select>
	
	<select id="listAll" resultType="org.lanqiao.eshop.entity.Yhb">
		select * from yhb
	select>
mapper>


Mybatis入门附电商项目迭代_第4张图片

  1. 编写MyBatis工具类

    可查看官服文档-谷歌浏览器经常打不开

    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 java.io.IOException;
    import java.io.InputStream;
    
    public class MybatisUtils {
    
       private static SqlSessionFactory sqlSessionFactory;
    
       static {
           try {
               String resource = "mybatis-config.xml";
               InputStream inputStream = Resources.getResourceAsStream(resource);
               sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
          } catch (IOException e) {
               e.printStackTrace();
          }
      }
    
       //获取SqlSession连接
       public static SqlSession getSession(){
           return sqlSessionFactory.openSession();
      }
    
    }
    

    6.java代码编写(获取session),进行CRUD操作

    package org.lanqiao.eshop.service.impl;
    
    import java.io.Serializable;
    import java.util.List;
    import java.util.Map;
    
    import org.apache.ibatis.session.SqlSession;
    import org.lanqiao.eshop.dao.BaseDaoAdapter;
    import org.lanqiao.eshop.dao.impl.YhbDao;
    import org.lanqiao.eshop.entity.Pager;
    import org.lanqiao.eshop.entity.Yhb;
    import org.lanqiao.eshop.service.IBaseService;
    import org.lanqiao.eshop.util.DateUtil;
    import org.lanqiao.eshop.util.MybatisUtils;
    import org.lanqiao.eshop.util.UUIDUtil;
    
    public class YhbService extends BaseDaoAdapter<Yhb> implements IBaseService<Yhb>{
    	YhbDao yhbDao=new YhbDao();
    	
    	@Override
    	public boolean add(Yhb obj) {
    		String yhbh=UUIDUtil.getUuid();
    		String zcsj=DateUtil.getNow(); 
    		obj.setYhbh(yhbh);
    		obj.setZcsj(zcsj);
    		
    		SqlSession sqlSession = MybatisUtils.getSession();
            //org.lanqiao.eshop.mapper.YhbMapper.add 此处要 .add   来锁定YhbMapper.xml中DMl的id
    		int ret = sqlSession.insert("org.lanqiao.eshop.mapper.YhbMapper.add", obj);
    		sqlSession.commit();
    		sqlSession.close();
    		
    		return ret > 0;
    	}
    }
    

    6.测试结果

Mybatis入门附电商项目迭代_第5张图片

​ 对应的数据库,添加成功!

Mybatis入门附电商项目迭代_第6张图片

你可能感兴趣的:(SSM框架学习,mybatis,mysql,java,maven)