Mybatis框架开发(一)

Mybatis框架开发(一)

mybatis的开发流程-helloworld

  1. maven项目(jar)
    在这里插入图片描述

  2. 配置依赖(POM)

    	<dependencies>
    		<dependency>
    			<groupId>mysql</groupId>
    			<artifactId>mysql-connector-java</artifactId>
    			<version>8.0.25</version>
    		</dependency>
    		<dependency>
    			<groupId>com.alibaba</groupId>
    			<artifactId>druid</artifactId>
    			<version>1.2.6</version>
    		</dependency>
    		<dependency>
    			<groupId>org.mybatis</groupId>
    			<artifactId>mybatis</artifactId>
    			<version>3.5.7</version>
    		</dependency>
    		<dependency>
    			<groupId>log4j</groupId>
    			<artifactId>log4j</artifactId>
    			<version>1.2.17</version>
    		</dependency>
    		<dependency>
    			<groupId>org.projectlombok</groupId>
    			<artifactId>lombok</artifactId>
    			<version>1.18.20</version>
    		</dependency>
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<version>4.12</version>
    			<scope>test</scope> <!--在测试环境下有效,其它环境不引入-->
    		</dependency>
    
    		<dependency>
    			<groupId>org.slf4j</groupId>
    			<artifactId>slf4j-log4j12</artifactId>
    			<version>1.7.32</version>
    		</dependency>
    		<dependency>
    			<groupId>org.slf4j</groupId>
    			<artifactId>slf4j-api</artifactId>
    			<version>1.7.32</version>
    		</dependency>
    	</dependencies>
    
  3. 创建表

在这里插入图片描述

  1. 实体类–映射表

    @Alias("Book") //实体类:别名
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class Book {
    	private Integer id;
    	private String title;
    	private Double price;
    	private String author;
    }
    
  2. 规范数据的操作(定义数据库的CRUD): mapper

public interface IBookMapper {
	
	void save(Book book);
	void deleteById(int id);
	void update(Book book);
	List<Book> findAll();

}
  1. 配置框架:
    在这里插入图片描述

    • 配置mybatis-configuration.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>
    	<!-- 读取数据源信息 -->
    	<properties resource="mybatis/druid/druid.properties" />
    	<!-- 配置别名 -->
    	<typeAliases>
    		<package name="com.dyit.mybatis.entity" />
    	</typeAliases>
    
    	<!--数据库的配置信息 -->
    	<environments default="development">
    		<environment id="development">
    			<transactionManager type="JDBC" /><!--JDBC事务管理 -->
    			<dataSource type="com.dyit.mybatis.util.MybatisDataSource"> <!---数据源 -->
    				<property name="driverClassName" value="${druid.driver}" />
    				<property name="url" value="${druid.url}" />
    				<property name="username" value="${druid.username}" />
    				<property name="password" value="${druid.password}" />
    			</dataSource>
    		</environment>
    	</environments>
    
    	<!--配置表和类的映射文件 -->
    	<mappers>
    		<mapper resource="mybatis/mapper/Book.mapper.xml" />
    	</mappers>
    </configuration>
    
    • 配置数据源信息druid.properties

      druid.url=jdbc:mysql://192.168.183.128:3306/ssm_db?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
      druid.username=root
      druid.password=123
      druid.driver=com.mysql.cj.jdbc.Driver
      
    /**
     * 使用自定义数据源
     * @author dyit
     *
     */
    public class MybatisDataSource extends UnpooledDataSourceFactory {
    	
    	public MybatisDataSource() {
    		this.dataSource = new DruidDataSource();
    	}
    }
    
    • 配置表和类的映射,配置CRUD:sql : xxx.mapper.xml

      • 配置namespace: 接口的全名–报名.接口名称

        <mapper namespace="com.dyit.mybatis.mapper.IBookMapper" >
        </mapper>
        
      • 配置表和类的映射关系

         <!-- 配置类的属性和表中的字段的映射关系 -->
         <resultMap type="Book" id="BookMap">
            <!-- 配置主键 -->
         	<id property="id" column="book_id"/>
            <result property="title" column="book_title"/>
            <result property="price" column="book_price"/>
            <result property="author" column="book_author"/>
         </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">
        
        <mapper namespace="com.dyit.mybatis.mapper.IBookMapper" >
        
        <resultMap type="Book" id="BookMap">
        
        <id property="id" column="book_id"/>
        <result property="title" column="book_title"/>
        <result property="price" column="book_price"/>
        <result property="author" column="book_author"/>
        </resultMap>
        
        <insert id="save">
        INSERT INTO book_tab(book_title,book_price,book_author)
        VALUES(#{title},#{price},#{author})
        </insert>
        
        <delete id="deleteById">
        DELETE FROM book_tab WHERE book_id=#{id}
        </delete>
        
        <update id="update">
        UPDATE book_tab SET book_title=#{title},book_price=#{price},book_author=#{author} WHERE book_id=#{id}
        </update>
        
        <select id="findAll" resultMap="BookMap">
        SELECT * FROM book_tab
        </select>
        	
        	
        </mapper>
        
        
  2. 代码测试(实现)

    • 创建SqlSessionFactory对象

      //读取mybatis-configuration.xml文件
      		Reader in = Resources.getResourceAsReader("mybatis/config/mybatis-configuration.xml");
      		//工厂
      		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);	
      
    • 打开SqlSession: 与数据库的会话

      SqlSession sqlSession = sqlSessionFactory.openSession();
      
    • 绑定接口

      //绑定接口
      		IBookMapper mapper = sqlSession.getMapper(IBookMapper.class);
      
    • 业务代码

      mapper.save(new Book(null, "西游记 ", 78.88, "吴承恩"));
      
    • 事务提交,关闭会话

		sqlSession.commit();
		sqlSession.close();
  1. 可以将上述测试封装

    package com.dyit.mybatis.util;
    
    import java.io.IOException;
    
    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 lombok.extern.slf4j.Slf4j;
    
    @Slf4j
    public class MybatisUtil {
    
    	private volatile static MybatisUtil instance;
    	private SqlSessionFactory sqlSessionFactory;
    
    	private MybatisUtil() {
    		init();
    	}
    
    	public static MybatisUtil getInstance() {
    		if (instance == null) {
    			synchronized (MybatisUtil.class) {
    				if (instance == null) {
    
    					instance = new MybatisUtil();
    
    				}
    			}
    		}
    		return instance;
    	}
    
    	private void init() {
    		try {
    			this.sqlSessionFactory = new SqlSessionFactoryBuilder()
    					.build(Resources.getResourceAsReader("mybatis/config/mybatis-configuration.xml"));
    		} catch (IOException e) {
    			log.debug(e.getMessage());
    			e.printStackTrace();
    		}
    	}
    
    	public SqlSession openSession() {
    		return this.sqlSessionFactory.openSession();
    	}
    
    }
    

测试类:


public class TestMybatis {

	private MybatisUtil db = MybatisUtil.getInstance();
@Test
	public void testUpdate() {
		SqlSession session = db.openSession();
		IBookMapper mapper = session.getMapper(IBookMapper.class);
		Book book = mapper.findById(7);
		mapper.update(book);
		mapper.update(book);
		session.commit();
		session.close();
	}
}
}

private MybatisUtil db = MybatisUtil.getInstance();
@Test
public void testUpdate() {
SqlSession session = db.openSession();
IBookMapper mapper = session.getMapper(IBookMapper.class);
Book book = mapper.findById(7);
mapper.update(book);
mapper.update(book);
session.commit();
session.close();
}
}
}

其中日志的配置文件

```java
log4j.rootLogger=debug,Console,Logfile

#Console output
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss} [%t] %rms (%-5p) [%c] -%l-- {%m}%n


log4j.appender.Logfile=org.apache.log4j.FileAppender
log4j.appender.Logfile.File=D:/logs/mybatis.log #日志文件目录
log4j.appender.Logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.Logfile.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss} [%t] %rms (%-5p) [%c] -%l-- {%m}%n

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值