Eclipse下的maven配置以及maven+Mybatis的使用
前言
今天简单写一下maven的入门配置以及基于maven下配合Mybatis搭建简单项目
一、Eclipse下maven的配置
1.首先创建两个文件夹maven-workspace以及maven-repository
2.打开eclipse并选择workspace(这里选刚才建好的maven-workspace)
3.设置字符格式为utf-8(一般设置workspace与jsp的格式为utf-8)
4.选择javaee创建maven项目
usersetting选择自己下载的maven包下的conf文件下的setting.xml文件。
local repository(本地仓)选择第一步创建的maven-repository。
选择create a simple project(原来默认的是use default workspace location),location选择刚才创建的maven-workspace,然后在底下新建新的项目mybatis-demo(名字可以自己取)
Group Id取com.企业名.项目名,Artifact Id取上一步的mybatis-demo,packaging选择jar(war为ee项目,jar为se项目)
创建完成后里面的内容如上图所示,第一项放置java代码,第二项放置配置的资源文件(xml,properties),第三项是测试代码的地方,可用来检查测试在第一项写好的代码。(ps:如果又遇到出现无法创建Maven项目的情况,可以在settings.xml更换镜像库,建议用阿里的镜像库,或者可以直接将他人比较完善的maven-repository拷贝下来作为自己的本地仓库)
二、Maven+Mybatis的使用
1.maven通过pom.xml文件注入依赖的方式来代替引入jar包
<dependencies>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java(数据库包) -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/druid(数据库连接池包) -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis(Mybatis包) -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok(lombok包) -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit(java测试包) -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/log4j/log4j(日志包) -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
2.在数据库中创建表(car_tab)
3.在项目中创建Car实体类
package com.dyit.mybatis.entity;
import java.util.Date;
import org.apache.ibatis.type.Alias;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Alias("Car")//定义别名:com.dyit.mybatis.entity.Car=Car
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Car {
private int id;
private String name;
private String createby;
private Date createtime;
}
5.配置Mybatis所需要的xml和properties文件如下图所示
(1).先配置druid.properties文件(连接数据库所用)
druid.url=jdbc:mysql://这里填自己的IP地址:3306/eimp_db?useUnicode=true&serverTimezone=Asia/Shanghai&useSSL=true
druid.username=填你的用户名
druid.password=填你的密码
(2).编写实体类
package com.dyit.mybatis.entity;
import java.util.Date;
import org.apache.ibatis.type.Alias;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Alias("Car")//定义别名:com.dyit.mybatis.entity.Car=Car与configuration配置中的<typeAliases>标签配合使用,是一种扫描包的方式
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Car {
private int id;
private String name;
private Double price;
private String createby;
private Date createtime;
}
(3).配置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>
<!--数据库的配置信息:url,username,password,driverClassName-->
<properties resource="config/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" > <!---数据源(Mybatis的数据源需要换阿里的数据源(type中为替换的数据源路径))-->
<property name="url" value="${druid.url}" />
<property name="username" value="${druid.username}" />
<property name="password" value="${druid.password}" />
</dataSource>
</environment>
</environments>
<!--配置表和类的映射文件-->
<mappers>
<mapper resource="mapper/Car.mapper.xml" />
</mappers>
</configuration>
ps:以下是替换的数据源内容
package com.dyit.mybatis.util;
import org.apache.ibatis.datasource.unpooled.UnpooledDataSourceFactory;
import com.alibaba.druid.pool.DruidDataSource;
/**
* 自定义阿里数据源替代mybatis数据源
* @author Lenovo
*
*/
public class MybatisDataSource extends UnpooledDataSourceFactory {
public MybatisDataSource() {
this.dataSource = new DruidDataSource();
}
}
(4).创建ICarMapper接口与下面要创建的Car.mapper.xml产生映射
(5).配置Car.mapper.xml
<?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.ICarMapper" >
<!-- 定义映射规则 --><!--property属性对应实体类属性,column属性对应数据库的表属性-->
<resultMap type="Car" id="carMap"><!--type对应实体类中@Alias("Car")-->
<id property="id" column="car_id"/>
<result property="name" column="car_name"/>
<result property="price" column="car_price"/>
<result property="createby" column="car_createby"/>
<result property="createtime" column="car_createtime"/>
</resultMap>
<!--insert标签会通过映射由Mybatis自己实现ICarMapper接口中的方法-->
<insert id="save">
INSERT INTO car_tab(car_name,car_price,car_createby,car_createtime)
VALUES(#{name},#{price},#{createby},#{createtime})
</insert>
<delete id="deleteById">
DELETE FROM car_tab WHERE car_id = #{id}
</delete>
<update id="update">
UPDATE car_tab SET car_name = #{name},
car_price = #{price},car_createby = #{createby},car_createtime = #{createtime}
WHERE car_id = #{id}
</update>
<select id="findAll" resultMap="carMap">
SELECT * FROM car_tab
</select>
</mapper>
(6).下面会创造一个管理Mybatis的工具,代码下面有为何创造该工具的原因。
package com.dyit.mybatis.util;
import java.io.IOException;
import java.util.concurrent.locks.ReentrantLock;
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 class MybatisUtil {
private SqlSessionFactory sqlSessionFactory;
private static final ReentrantLock lock = new ReentrantLock();
private static MybatisUtil instance;
private MybatisUtil() {
try {
sqlSessionFactory
= new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis-configuration.xml"));
} catch (IOException e) {
e.printStackTrace();
}
}
public static MybatisUtil getInstance() {
lock.lock();
try {
if(instance == null) {
instance = new MybatisUtil();
}
}finally {
lock.unlock();
}
return instance;
}
public SqlSession getSqlSession() {
return sqlSessionFactory.openSession();
}
}
该工具其实是封装了操纵Mybatis的重复步骤,减少代码冗余,同时使用懒汉式单例模式以及线程锁的方式增强运行时的安全性。
SqlSession:使用 MyBatis 的主要 Java 接口就是 SqlSession。你可以通过这个接口来执行命令,获取映射器示例和管理事务。
SqlSessionFactory:创建 SqlSession 实例。
SqlSessionFactoryBuilder:创建一个 SqlSessionFactory 实例。
至此关于Mybatis所需要的准备已经创建完毕,接下来写个测试类来测试一下构建好的Mybatis
三、测试
编写一个测试类CarTest
package com.dyit.mybatis.test;
import static org.junit.Assert.*;
import java.util.Date;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import com.dyit.mybatis.entity.Car;
import com.dyit.mybatis.mapper.ICarMapper;
import com.dyit.mybatis.util.MybatisUtil;
public class CarTest {
private SqlSession sqlSession = MybatisUtil.getInstance().getSqlSession();
@Test//测试添加
public void test() {
ICarMapper mapper = sqlSession.getMapper(ICarMapper.class);
Car car = new Car();
car.setName("奔驰");
car.setPrice(500000.00);
car.setCreateby("manager");
car.setCreatetime(new Date());
mapper.save(car);
sqlSession.commit();
sqlSession.close();
}
@Test//测试查询
public void testFindAll() {
sqlSession = MybatisUtil.getInstance().getSqlSession();
ICarMapper mapper = sqlSession.getMapper(ICarMapper.class);
List<Car> list = mapper.findAll();
System.out.println(list);
sqlSession.commit();
sqlSession.close();
}
@Test//测试更改
public void testUpdate() {
sqlSession = MybatisUtil.getInstance().getSqlSession();
ICarMapper mapper = sqlSession.getMapper(ICarMapper.class);
Car car = new Car();
car.setId(1);
car.setName("奔驰");
car.setPrice(550000.50);
car.setCreateby("manager");
car.setCreatetime(new Date());
mapper.update(car);
sqlSession.commit();
sqlSession.close();
}
@Test//测试删除
public void testDel() {
sqlSession = MybatisUtil.getInstance().getSqlSession();
ICarMapper mapper = sqlSession.getMapper(ICarMapper.class);
mapper.deleteById(1);
sqlSession.commit();
sqlSession.close();
}
}
结果如下图所示:
添加:
更改:
删除:
至此关于maven与Mybatis的简单应用就全部完成了,如有疑问欢迎评论区讨论留言。