今天我们来通过一个项目小实战(spring+mybatis),让大家对maven有更加深刻的认知
一)建立maven工程
①右击new-》other-》maven-》Maven Project,然后next、next,填写项目需要的相关信息,点击finish
②修改项目jdk,项目上右击选择properties,进入一窗口
--点击Java Build Path,修改JRE System Library,选择你安装的jdk。
--点击Resource,修改字符集为uTF-8
--点击Java Compiler,修改编译版本为1.7或者1.8(ps:这个跟项目中的spring版本有关,比如我演示用的这个就不能用1.8,要不然报依赖有关的额错误),1.5有点太远古(不过我们这个例子中影响不大)
③我们知道,有了mybatis就是要操作数据库了哈,嗯,肯定涉及到很多数据库配置文件,根据管理,约束?我们都会再建一个包来放这些文件,右击项目-》new-》Source Folder
一顿操作之后项目的目录结构如下
二)添加依赖,我们打开pom.xml文件添加依赖
org.springframework
spring-core
3.2.8.RELEASE
org.springframework
spring-webmvc
3.2.8.RELEASE
org.springframework
spring-context
3.2.8.RELEASE
org.springframework
spring-context-support
3.2.8.RELEASE
org.springframework
spring-aop
3.2.8.RELEASE
org.springframework
spring-aspects
3.2.8.RELEASE
org.springframework
spring-tx
3.2.8.RELEASE
org.springframework
spring-jdbc
3.2.8.RELEASE
org.springframework
spring-web
3.2.8.RELEASE
junit
junit
4.12
test
org.springframework
spring-test
3.2.8.RELEASE
test
log4j
log4j
1.2.12
org.slf4j
slf4j-api
1.6.6
org.slf4j
slf4j-log4j12
1.6.6
org.mybatis
mybatis
3.2.1
org.mybatis
mybatis-spring
1.2.0
mysql
mysql-connector-java
8.0.12
三)下载msyql数据库,我下载的是最新的8.X,这个去官网下载,然后一路next就好,注意,如果电脑比较新,去下载个c++2015,保证能安装成功
连接数据库的方式有很多中,比如使用三方工具sqlyog,或者使用mysql自带工具:MySQL Workbench……,进去之后我们看下字符集:show variables like 'character%';
新版的mysql安装都是utf8mb4,(5.7的是utf-8),其中utf8mb4更为强大哈,不仅能兼容utf-8,同时支持4字节的表情字符【普通的字符串或者表情占三个字节,移动端的表情符号占四个字节】,腻害了,mysql也是良心企业啊
建立数据库oa,建库语句:create database oa
在建一个表employee,建表语句:
use oa;
CREATE TABLE `employee` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(45) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='员工表'
四)写配置文件
application-organ.xml(注意,这个地方没有使用application.xml,是因为如果这个一个单独的小项目,那么可以直接这样命令,我们是打算搞一个大项目的,所以得有所区分)
jdbc.properties(数据库配置文件)
log4j.properties(日志配置文件)
mybatis-config.xml(mybatis配置文件)
五)写java类
实体类:Employee.java
service接口:EmployeeService.java
service实现类:EmployeeServiceImpl.java
dao接口:EmployeeMapper.java
dao实现:我们使用的是文件实现
测试类:EmployeeServiceTest.java
弄好了之后结构如下
六)单元测试
EmployeeServiceTest.java类中右击run-》junit测试,我们发现数据库有数据了哈,ps:程序运行过程中可能回报一个时区有关的异常(set global time_zone='+8:00';处理一下)
我们执行成功,并看下数据库,数据入库了,ok了
代码如下
EmployeeMapper.java
package com.mzlx.oa.organ.mapper;
import com.mzlx.oa.organ.model.Employee;
public interface EmployeeMapper {
public void addEmployee(Employee employee);
public Employee findEmployeeById(Long id);
}
EmployeeMapper.xml
INSERT INTO employee(name,age) VALUES(#{name},#{age})
Employee.java
package com.mzlx.oa.organ.model;
public class Employee {
private Long id;
private String name;
private Integer age;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
EmployeeService.java
package com.mzlx.oa.organ.service;
import com.mzlx.oa.organ.model.Employee;
public interface EmployeeService {
public void addEmployee(Employee employee);
public Employee findEmployeeById(Long id);
}
EmployeeServiceImpl .java
package com.mzlx.oa.organ.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.mzlx.oa.organ.mapper.EmployeeMapper;
import com.mzlx.oa.organ.model.Employee;
import com.mzlx.oa.organ.service.EmployeeService;
@Service("employeeService")
public class EmployeeServiceImpl implements EmployeeService {
@Autowired
private EmployeeMapper employeeMapper;
public void addEmployee(Employee employee) {
employeeMapper.addEmployee(employee);
}
public Employee findEmployeeById(Long id) {
return employeeMapper.findEmployeeById(id);
}
}
EmployeeServiceTest.java
package com.mzlx.oa.organ.service;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.mzlx.oa.organ.model.Employee;
@ContextConfiguration(locations = {"classpath:application-organ.xml"})
@RunWith(SpringJUnit4ClassRunner.class)
public class EmployeeServiceTest {
@Autowired
private EmployeeService employeeService;
@Test
public void testAddEmployee() {
Employee employee = new Employee();
employee.setName("测试");
employee.setAge(20);
employeeService.addEmployee(employee);
}
}
配置文件
application-organ.xml【心细的童鞋可能注意到了,有的地方使用classpath,有的地方使用了classpath*,这是有区别的,其中classpath:只会到你的class路径中查找找文件。classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找。】
classpath*:jdbc.properties
jdbc.properties(注意,mysql8的驱动跟5.7以及之前的不一样哦)
#jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.driverClassName=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/oa
jdbc.username=root
jdbc.password=123123123
log4j.properties
log4j.rootLogger=DEBUG,Console,Stdout
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
mybatis-config.xml
补充一下,前面我们使用的是直接运行测试,实际工作中还是看是否能生成可行性jar包
右击项目-》run-》Run Configurations-》配置一下-》run
如果出现BUILD SUCCESS,则表示编译成功
不过上面的代码肯定是失败的,为啥呢,这是一个项目,再也不是一个普通的java类了,所以相关依赖都需要打包才可以呢
解决方案:在pom.xml文件中添加如下标签代码
src/main/java
**/*.xml
true
src/main/resources
**/*.xml
**/*.properties
true
嗯,之后再run,出现BUILD SUCCESS,编译成功