建议在resources下配置接口的mapper类,并且和接口具有相同的路径
1. 导入mybatis和mysql相关驱动
<!--导入相关依赖-->
<dependencies>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
<!--mybatis驱动-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!--junit单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>provided</scope>
</dependency>
<!--log4j依赖-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
log4j配置文件
2. 配置 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>
<!--配置-->
<properties>
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/demo1?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</properties>
<settings>
<!--Log4j 日志-->
<setting name="logImpl" value="LOG4J"/>
<!--驼峰命名对应数据库下划线-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!--起别名,可以在mapper.xml的返回值/参数类型中用 alias 替换 type-->
<!-- package可以在特定的路径扫描包中的类,可以使用注解@Alias("XX")来替换类的全限定名,如果不用注解则默认小写字母的类名-->
<typeAliases>
<!--<typeAlias type="com.c21w.pojo.User" alias="User"></typeAlias>-->
<package name="com.c21w.pojo"/>
</typeAliases>
<!--多套环境 default可以默认选中哪套环境-->
<environments default="development">
<!--环境-->
<environment id="development">
<!--事务管理 默认 JDBC-->
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!--每一个mapper都需要在xml中注册-->
<!--package可以吧一个包内的全部xml文件导入,前提是xml文件和对应的接口在同一个包-->
<mappers>
<package name="com.c21w.dao"/>
<!--<mapper resource="com/c21w/dao/Mapper/UserMapper.xml"></mapper>-->
</mappers>
</configuration>
3. 创建mybatis工具类
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 java.io.IOException;
import java.io.InputStream;
public class Utils {
private static SqlSessionFactory sqlSessionFactory = null;
static{
/*获取 sqlSessionFactory 对象 */
String resource = "mybatis-config.xml";
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
e.printStackTrace();
}
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
// 有了 SqlSessionFactory,我们可以从中获得 SqlSession 的实例。SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。
// 你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession(false);
}
//传入true可以默认开启事务
public static SqlSession getSqlSession(boolean bl){
return sqlSessionFactory.openSession(bl);
}
}
4. 编写dao/mapper接口
//例子:
import com.c21w.pojo.User;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
import java.util.Map;
public interface UserMapper {
//查询所有用户信息
List<User> getUserList();
// 根据姓名查询用户
User getUser(String name);
// 添加一个用户(多个参数列表可以使用注解)
void addUser(@Param("name")String name,@Param("time") Date time, @Param("math")double math, @Param("eng")double english,@Param("sex") String sex);
// 修改信息
void updateUser(User user);
// 多参数可以封装为map
void updateUser2(Map<String,Object> map);
// 删除
void deleteUser(String name);
}
5. 创建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">
<!--namespace 绑定一个对于的 Dao/Mapper 接口-->
<mapper namespace="com.c21w.dao.UserMapper">
<!--查询语句-->
<!--id对应方法名字-->
<!--resultType对应返回值,集合的话对应泛型-->
<select id="getUserList" resultType="User">
select * from demo1_01
</select>
<select id="getUser" resultType="User" parameterType="String">
select * from demo1_01 where name = #{name};
</select>
<!--使用@Param注解可以不用 parameterType-->
<insert id="addUser">
insert into demo1_01 value (#{name},#{time},#{math},#{eng},#{sex});
</insert>
<update id="updateUser" parameterType="User">
update demo1_01 set math=#{math} where name=#{name}
</update>
<!--多参数封装为 Map 集合,#{XX},XX为键的名字-->
<update id="updateUser2" parameterType="map">
update demo1_01 set math = #{mathed} where name = #{named};
</update>
<delete id="deleteUser" parameterType="java.lang.String" >
delete from demo1_01 where name=#{name};
</delete>
</mapper>
多对一和一对多查询
6. 去 mybatis-config.xml中注册Dao/Mapper接口(要用斜杠分割)
<!--例子:-->
<mappers>
<mapper resource="com/c21w/dao/Mapper/UserMapper.xml"></mapper>
</mappers>
7. 去pom文件中配置文件加载的位置
<!--配置加载位置-->
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
<filtering>true</filtering>
</resource>
<!-- 把 java 中的 xml 文件和 properties 文件 加载-->
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
8. 编写运行
package com.c21w.dao;
import com.c21w.utils.Umybais;
import org.junit.Test;
public class UserMapperTest {
@Test
public void test(){
Utils.getSqlSession().getMapper(UserMapper.class).getUserList()
.stream().forEach(user -> System.out.println(user));
}
}