首先我的开发环境如下:
idea:2021、Java:9、maven:3.6.1 、mybatis:3.5.7
有些版本的环境会出问题,我之前使用的是3.8的maven和Java17,结果因为版本太高一直报错,找了好几天。所以工欲善其事必先利其器,先把环境整合好是最好的,不然做到一半有报错是真的难受。
项目结构图如下:
一、首先引入对应的maven依赖
<dependencies>
<!-- mybatis核心-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<!-- junit测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<!-- mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<!-- log4j日志 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
二、创建相关的实体类(User.java)、建立对应的数据源(ssm数据库下建立一个t_user表)
public class User {
private Integer id;
private String username;
private String password;
private Integer age;
private String gender;
private String email;
//其他方法自己添加
}
三、创建Mybatis的核心配置文件(mybatis-config.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>
<!--
mybatis的核心配置文件中的标签必须按照指定的顺序配置:
properties?,settings?,typeAliases?,typeHandlers?,
objectFactory?,objectWrapperFactory?,reflectorFactory?,
plugins?,environments?,databaseIdProvider?,mappers?-->
<!-- 引入properties文件,此后就可以在当前文件中使用${key}的方式访问value-->
<properties resource="jdbc.properties"/>
<typeAliases>
<!--typeAlias
type:设置需要起别名的类型
alias:设置某个类型的别名(别名在UserMapper.xml中的resultType|resultMap中使用,方便引用)
-->
<!-- <typeAlias type="com.atguigu.mybatis.pojo.User" alias="abc"/>-->
<!--如果不设置alias别名,那么默认拥有一个别名,即类名且不区分大小写-->
<typeAlias type="com.atguigu.mybatis.pojo.User"/>
<!--通过包设置别名,指定包下所有的类型将全部拥有默认的别名,即类名且不区分大小写-->
<package name="com.atguigu.mybatis.pojo"/>
</typeAliases>
<!--environments:配置连接数据库的环境
属性:
default:设置默认使用的环境id-->
<environments default="development">
<!--
environment:设置一个具体的连接数据库的环境
属性:
id:设置环境的唯一标识,不能重复-->
<environment id="development">
<transactionManager type="JDBC"/>
<!--
dataSource:设置数据源
属性:
type:设置数据源的类型
type="POOLED|UNPOOLED|JNDI"
POOLED:使用数据库连接池
UNPOOLED:不使用数据库连接池
JNDI:使用上下文的数据源
-->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
<!--可以配置不同环境下的数据源-->
<environment id="test">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/ssm"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--引入映射文件-->
<mappers>
<!-- 单独引入某个mapper.xml文件
<mapper resource="mappers/UserMapper.xml"/>-->
<!--
以包的方式引入映射文件,但是必须满足两个条件:
1、mapper接口和映射文件所在的包必须一致
2、mapper接口的名字和映射文件的名字必须一致
-->
<package name="com.atguigu.mybatis.mapper"/>
</mappers>
</configuration>
四、创建mapper接口(UserMapper.java)
public interface UserMapper {
/*添加用户信息*/
int insertUser();
/*删除单条用户信息*/
int deleteUser();
/*修改单条数据*/
void updateUser();
/*查询一个实体类对象*/
User getUserById();
/*查询list集合*/
List<User> getUserList();
}
五、创建MyBatis的映射文件
<?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.atguigu.mybatis.mapper.UserMapper">
<!--
mapper接口和映射文件要保证两个一致:
1、mapper接口的全类名和映射方法的namespace一致
2、mapper接口中的方法的方法名要和映射文件中的sql的id保持一致
-->
<!--添加;int insertUser();-->
<insert id="insertUser">
insert into t_user values(null,'admin','123456',23,'男','12345@qq.com')
</insert>
<!--删除:int deleteUser();-->
<delete id="deleteUser">
delete from t_user where id = 2
</delete>
<!--修改:void updateUser();-->
<update id="updateUser">
update t_user set username = 'root', password = '123' where id = 1
</update>
<!--
resultType:设置结果类型,即查询的数据要转换的Java类型
resultMap:自定义映射,处理多对一或者一对多的映射关系
-->
<!--查询单个:User getUserById();-->
<select id="getUserById" resultType="com.atguigu.mybatis.pojo.User">
select * from t_user where id = 1
</select>
<!--查询list集合List<User> getUserList();-->
<!--<select id="getUserList" resultType="abc"> 使用别名-->
<select id="getUserList" resultType="user">
select * from t_user
</select>
</mapper>
六、因为mybatis-config.xml中引入properties文件,所以需要建立一个jdbc.properties
#前面的jdbc相当于一个包名限定
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm
#如果MySQL使用的是8.0以上的需要配置时区
#jdbc.driver=com.mysql.cj.jdbc.Driver
#jdbc.url=jdbc:mysql://localhost:3306/ssm?serverTimezione=UTC
jdbc.username=root
jdbc.password=123456
jdbc.maxTotal=30
jdbc.minPoolSize=10
jdbc.initialSize=15
七、添加log4j方便查看(log4j.xml)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<param name="Encoding" value="UTF-8" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS}%m (%F:%L) \n" />
</layout>
</appender>
<logger name="java.sql">
<level value="debug" />
</logger>
<logger name="org.apache.ibatis">
<level value="info" />
</logger>
<root>
<level value="debug" />
<appender-ref ref="STDOUT" />
</root>
</log4j:configuration>
八、因为测试类MyBatisTest中经常要获取SqlSession对象,所以可以单独封装成一个方法(SqlSessionUtil.java)
public class SqlSessionUtil {
public static SqlSession getSqlSession(){
SqlSession sqlSession = null;
try {
//获取核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//获取SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//获取SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
//获取sql的会话对象SqlSessions(true):自动提交事务,是Mybatis提供的操作数据库的对象
sqlSession = sqlSessionFactory.openSession(true);
} catch (IOException e) {
e.printStackTrace();
}
return sqlSession;
}
}
九、测试类MyBatisTest(MyBatisTest.java)
public class MyBatisTest {
// 添加用户
@Test
public void testInsert() throws IOException {
//获取核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//获取SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//获取SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
/*//获取sql的会话对象SqlSessions(不会自动提交事务,所以要自己启用commit()方法),是Mybatis提供的操作数据库的对象
SqlSession sqlSession = sqlSessionFactory.openSession();*/
//获取sql的会话对象SqlSessions(true):自动提交事务,是Mybatis提供的操作数据库的对象
SqlSession sqlSession = sqlSessionFactory.openSession(true);
//获取UserMapper的代理实现类对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//调用mapper接口中的方法,实现添加用户信息的功能
int result = mapper.insertUser();
// System.out.println(result);
/*//启用事务提交(不能自动提交事务时候,手动打开提交事务)
sqlSession.commit();*/
//关闭资源
sqlSession.close();
}
// 删除用户
@Test
public void deleteUser(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession(); //调用自己创建的获取的sqlsession的方法获取sqlSession
UserMapper mapper = sqlSession.getMapper(UserMapper.class);//通过getMapper方法获得要操作的Mapper方法
mapper.deleteUser(); //调用mapper中的方法
sqlSession.close(); //关闭资源
}
// 修改用户
@Test
public void testUpdateUser(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.updateUser();
sqlSession.close();
}
// 查询一个实体类对象
@Test
public void getUserById(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.getUserById();
System.out.println(user);
sqlSession.close();
}
// 查询一个实体类对象
@Test
public void getUserList(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> list = mapper.getUserList();
list.forEach(System.out::println);//使用forEach遍历
sqlSession.close();
}
}
项目测试结果如图
本文含有隐藏内容,请 开通VIP 后查看