MyBatis框架环境搭建与开发流程
一.maven项目的构建
maven:项目全生命周期构建工具。
1.官网下载maven,将其包放到盘根目录下
2.创建文件夹 maven-respository :依赖仓库,用来存放各类架包
3.配置maven/conf/settings.xml文件
1). 打开xml文件,将53行语句拷贝到55行,将标签中的内容改为maven-respository的路径
2). 在160行配置mirror镜像(此处使用阿里云镜像)
3).配置jdk版本号:将200-216行代码剪切到237行,并更改版本号(1.8版本如图所示)
4.sts(eclipse)配置maven并创建项目
1).新建maven-workspace文件夹,用来存放maven项目
2).打开sts(eclipse).并切换路径
3).重新配置sts
1.1 创建javase项目
新建一个maven项目,按如图所示步骤进行操作
项目结构说明:
1.2创建javaee项目**
新建一个maven项目,按如图所示步骤进行操作
项目结构:
创建完成后,右键点击项目选择Properties进入
接着
设置完后,右键点击ee项目,选择java–ee tools 选中下图标记的选项。
在web.xml中做出如下图更改操作
此时maven–ee项目已经构建完成。
二.MyBatis开发流程示例
项目需求:在数据库中构建一个book_tab表,完成对表的CRUD操作
1.创建一个maven项目
项目的整体结构如图所示:
2.在pom.xml中配置依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yang.maven</groupId>
<artifactId>mybatis-hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
<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>
<!-- mybatis -->
<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>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
<!-- junit单元测试 -->
<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>
</project>
3.在entity包下构建映射表(book_tab)的实体类
package com.yang.mybatis.entity;
import org.apache.ibatis.type.Alias;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Alias("Book") //实体类的别名
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Book {
private Integer id;
private String name;
private Double price;
private String author;
}
4.在mapper包下定义接口:实现数据库的CRUD操作
package com.yang.mybatis.mapper;
import java.util.List;
import com.dyit.mybatis.entity.Book;
public interface IBookMapper {
void save(Book book); //增
void delet(int id); //删
void upDate(Book book); //改
List<Book> findAll(); //全查询
}
5.配置框架
1)配置数据库
druid:
druid.url=jdbc:mysql://192.168.0.199:3306/ssm_db?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
druid.username=root
druid.password=123
druid.driver=com.mysql.cj.jdbc.Driver
2)配置表与类的映射
在util包下构建MybatisDataSource:
package com.yang.mybatis.util;
import org.apache.ibatis.datasource.unpooled.UnpooledDataSourceFactory;
import com.alibaba.druid.pool.DruidDataSource;
/**
* 使用自定义数据源
* @author yang
*
*/
public class MybatisDataSource extends UnpooledDataSourceFactory {
public MybatisDataSource() {
this.dataSource = new DruidDataSource();
}
}
在config包下构建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>
<!-- druid的配置文件的位置 ,${druid.username}取出配置文件druid.username的值-->
<properties resource="mybatis/druid/druid.properties"/>
<!-- 配置别名,配合@Alais,扫描指定包内的锁有@Alais注解的类 -->
<typeAliases>
<package name="com.yang.mybatis.entity"/>
</typeAliases>
<!--数据库的配置信息-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" /><!--JDBC事务管理-->
<dataSource type="com.yang.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>
3)配置sql
在mapper包下构建Book.mapper.xml进行配置:
配置namespace:
<!-- 接口的全名 -->
<mapper namespace="com.yang.mybatis.mapper.IBookMapper">
</mapper>
配置表和类的映射关系:
<!-- 配置类的属性和表中的字段的映射关系 -->
<resultMap type="Book" id="BookMap">
<!-- 配置主键 -->
<id property="id" column="book_id" />
<result property="name" column="book_name" />
<result property="price" column="book_price" />
<result property="author" column="book_author" />
</resultMap>
配置sql语句:
<!--增 -->
<insert id="save">
INSERT INTO book_tab(book_name,book_price,
book_author)
VALUES(#{name},#{price},#{author})
</insert>
<!-- 删 -->
<delete id="delet">
DELETE FROM book_tab WHERE book_id=#{id}
</delete>
<!-- 改 -->
<update id="upDate">
UPDATE book_tab SET book_name=#{name}, book_price=#{price},book_author=#{author}
WHERE book_id=#{id}
</update>
<!-- 全查询 -->
<select id="findAll" resultMap="BookMap">
SELECT * FROM book_tab
</select>
6.做代码junit测试
package com.dyit.test;
import static org.junit.Assert.*;
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 org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.dyit.mybatis.entity.Book;
import com.dyit.mybatis.mapper.IBookMapper;
public class MybatisTest {
private SqlSession sqlSession;
private static SqlSessionFactory sqlFactory; //创建工厂
static {
try {
sqlFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis/config/mybatis-configuration.xml"));
} catch (IOException e) {
e.printStackTrace();
}
}
@Before//最先执行的before方法,将sqlsession创建出来
public void before() {
sqlSession = sqlFactory.openSession();
}
@Test
public void testSave() { //增
IBookMapper mapper = sqlSession.getMapper(IBookMapper.class);//获取接口路径
mapper.save(new Book(null, "明朝那些事", 33.98, "当代明月"));
}
@Test
public void testUpDate() { //改
IBookMapper mapper = sqlSession.getMapper(IBookMapper.class);
mapper.save(new Book(1, "平凡的世界", 40.09, "路遥"));
}
@Test
public void testDelet() { //删
IBookMapper mapper = sqlSession.getMapper(IBookMapper.class);
mapper.delet(1);
}
@Test
public void TestfindAll() { //查
IBookMapper mapper = sqlSession.getMapper(IBookMapper.class);
List<Book> list = mapper.findAll();
System.out.println(list);
}
@After //最后执行事务的提交和关闭连接
public void after() {
sqlSession.commit();
sqlSession.close();
}
}