编辑器:IDEA企业版
构建系统:Maven
数据库:MySQL
选择新建项目,在E盘下创建名为SMDemo的项目,构建系统选择Maven.
src/main/java - java 逻辑代码类 存放的位置
src/main/resources - 配置文件、资源包等存放的位置
src/test/java - java测试类 存放的位置
pom.xml - 添加依赖的位置,maven自动帮我们导入依赖对应的jar包
打开pom.xml文件,初始代码如下:
4.0.0
org.example
SMDemo
1.0-SNAPSHOT
8
8
UTF-8
添加
org.mybatis
mybatis
3.5.2
mysql
mysql-connector-java
5.1.47
com.alibaba
druid
1.1.23
org.springframework
spring-web
4.3.18.RELEASE
org.springframework
spring-orm
4.3.18.RELEASE
org.mybatis
mybatis-spring
2.0.2
junit
junit
4.13.2
test
8
8
UTF-8
org.mybatis
mybatis
3.5.2
mysql
mysql-connector-java
5.1.47
com.alibaba
druid
1.1.23
org.springframework
spring-web
4.3.18.RELEASE
org.springframework
spring-orm
4.3.18.RELEASE
org.mybatis
mybatis-spring
2.0.2
junit
junit
4.13.2
test
点击右上角的小按钮刷新导入
在以前MyBatis阶段,我们编写项目会添加一个mybatis-config.xml文件,在文件中配置数据库连接的相关参数等,如下:
如今我们使用Spring,对于Dao的Dao.xml实现,我们需要使用Spring的IoC容器进行bean的管理。因此,我们不再需编写mybatis-config.xml,而是在Spring的配置文件中编写相关配置,将所有dao对应的dao.xml生成对应的实例。
新建Spring的xml配置文件app.xml:
管理员身份启动cmd,输入 net start mysql 启动 mysql 数据库服务。
net start mysql
输入用户名、密码登录 mysql 。
mysql -u 你的用户名 -p
查看 mysql 中的数据库,选择你的数据库
show databases;
use 你的数据库;
创建了一张 user 表,包含了 id,name,password 三个字段。其中 id 字段为主键,设置为自动增长
create table user(
id int primary key auto_increment,
name varchar(20),
password varchar(20)
);
插入若干条记录,用于后面的测试
insert into user values(null,"ketty","root");
查看表
select * from user;
打开IDEA右侧的数据库连接,选择 + 号,选择MySQL.
填写相关配置,包括MySQL连接的用户名和密码,要连接的数据库,在URL的后面添加如下字段。
?serverTimezone=GMT&useSSL=false
连接成功后,可以看见我们数据库中的表。如果没有出现表,可以点击上面的刷新按钮刷新一下。
右键src/main/java目录,新建com.app.pojo、com.app.dao、com.app.service目录
找到插件,在搜索栏搜索better-mybatis-generator插件,点击添加。
右键user类,选择mabatis-generate选项。
这里我们修改pojo类、dao类、dao.xml 三大类文件生成的位置(红框标注处),分别修改成我们刚刚新建的com.app.pojo包以及com.app.dao包。
❗注意如果你的mysql版本是8.0及以上,需要勾选下面mysql_8(红框标注处)。
❗查看mysql版本:打开cmd,输入mysql -V
mysql -V
修改完毕后,点击确定。第一次连接会要我们输入数据库连接的账号和密码。填写后在点击确定。
可以看见,我们的com.app.pojo和com.app.dao目录下多了四个文件。这四个文件是插件自动帮我们生成的,包括生成了一些常用的SQL单表操作,如根据条件查询,根据条件修改等。我们在service中就可以直接使用他们了。
编写UserService接口,定义2个方法。
package com.app.service;
import com.app.pojo.User;
import java.util.List;
public interface UserService {
List getAllUser();
long countByExample();
}
创建Impl目录,编写UserServiceImpl实现类,实现2个方法。
package com.app.service.impl;
import com.app.dao.UserDao;
import com.app.pojo.User;
import com.app.pojo.UserExample;
import com.app.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Autowired // 自动注入
private UserDao userDao;
@Override
public List getAllUser() {
return userDao.selectByExample(null);
}
@Override
public long countByExample() {
UserExample userExample = new UserExample();
UserExample.Criteria criteria = userExample.createCriteria();
criteria.andNameLike("%t%");
return userDao.countByExample(userExample);
}
}
⭕在我们使用插件创建的类中,有一个之前没有见过的类UserExample。这个类是给我们拼接条件用的。
在SQL语句中,我们可能会使用到条件进行增删改查。UserExample中有一个内部类Criteria,通过这个内部类中的方法,我们可以拼接我们像要的条件。
⭕如上面的第二个方法中,我们使用了userDao的countByExample()方法。这个方法的SQL语句原本是如下这样:
select count(*) from user;
当我们使用criteria的andNameLike("%t%")方法时,这个方法帮助我们在查询语句后面添加了一个根据name模糊查询的条件。Criteria还有其他很多方法可供选择,这样我们就可以自由的根据需求去拼接我们想要的SQL语句。
⭕当然,如果我们在使用XXXByExample()方法时传入了null值,SQL就没有任何条件,如第一个方法那样,查询表中所有的记录。
在src/test/java目录下创建com.app.test目录,创建UserTest类。
注解执行顺序:@Before -> @Test -> @After
即@Before在@Test标注的方法前执行;
@After在@Test标注的方法后执行。
package com.app.test;
import com.app.dao.UserDao;
import com.app.pojo.User;
import com.app.service.UserService;
import com.app.service.impl.UserServiceImpl;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.List;
public class UserTest {
private ApplicationContext applicationContext;
@Before
public void before() {
applicationContext = new ClassPathXmlApplicationContext("app.xml");
}
@Test
public void test() {
UserDao userDao = applicationContext.getBean(UserDao.class);
User user = userDao.selectByPrimaryKey(8);
System.out.println(user);
}
@Test
public void testGetAllUser() {
UserService userService = applicationContext.getBean(UserServiceImpl.class);
List users = userService.getAllUser();
for (User user : users) {
System.out.println(user);
}
}
@Test
public void testCountByExample() {
UserService userService = applicationContext.getBean(UserServiceImpl.class);
long i = userService.countByExample();
System.out.println(i);
}
}