前言
本篇博文是MyBatis(简化数据库操作的持久层框架)–快速入门[上]的核心部分,分享了MyBatis实现sql的xml配置和一些关联配置、异常分析
个人主页:晨犀主页
个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力
欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看
如果文章有什么需要改进的地方还请大佬不吝赐教 先在次感谢啦
配置addMonster方法
1. id=“addMonster” 就是接口的方法名
2. parameterType=“com.nlc.entity.Monster” 放入的形参的类型
3. 注意"com.nlc.entity.Monster" 可以简写
4. 写入sql语句=> 在sqlyog 写完成-测试通过,再拿过来
5. (age
, birthday
, email
, gender
, name
, salary
) 表的字段
6. (#{age}, #{birthday}, #{email}, #{gender}, #{name}, #{salary}) 是从传入的monster对象属性值
7. 这里 #{age} age 对应monster对象的属性名,其它一样
DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nlc.mapper.MonsterMapper">
<insert id="addMonster" parameterType="com.nlc.entity.Monster" useGeneratedKeys="true" keyProperty="id">
INSERT INTO `monster`
(`age`, `birthday`, `email`, `gender`, `name`, `salary`)
VALUES (#{age}, #{birthday}, #{email}, #{gender}, #{name}, #{salary})
insert>
mapper>
<mappers>
<mapper resource="com/nlc/mapper/MonsterMapper.xml"/>
mappers>
MyBatisUtils 工具类,可以得到SqlSession
public class MyBatisUtils {
//属性
private static SqlSessionFactory sqlSessionFactory;
//编写静态代码块-初始化sqlSessionFactory
static {
try {
//指定资源文件, 配置文件mybatis-config.xml
String resource = "mybatis-config.xml";
//获取到配置文件mybatis-config.xml 对应的inputStream
//加载文件时,默认到resources目录=>运行后的工作目录target-classes
InputStream resourceAsStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
System.out.println("sqlSessionFactory="+ sqlSessionFactory.getClass());
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 1. 获得SqlSession 的实例
* 2. SqlSession 提供了对数据库执行SQL 命令所需的所有方法。
* 3. 通过SqlSession 实例来直接执行已映射的SQL 语句
* @return
*/
//编写方法,返回SqlSession对象-会话
public static SqlSession getSqlSession() {
return sqlSessionFactory.openSession();
}
}
完成初始化配置,创建测试方法
public class MonsterMapperTest {
//属性
//这个是Sql 会话,通过它可以发出sql 语句
private SqlSession sqlSession;
private MonsterMapper monsterMapper;
/**
* 1. 当方法标注 @Before, 表示在执行你的目标测试方法前,会先执行该方法,相当于spring的前置通知
* 2. 这里在测试的时候,可能会出现一些麻烦,下面会说解决方案
*/
//编写方法完成初始化
@Before
public void init() {
//通过SqlSessionFactory 对象获取一个SqlSession 会话
sqlSession = MyBatisUtils.getSqlSession();
//获取到到MonsterMapper对象 class com.sun.proxy.$Proxy7 代理对象
//, 底层是使用了动态代理机制
monsterMapper = sqlSession.getMapper(MonsterMapper.class);
System.out.println("monsterMapper=" + monsterMapper.getClass());
}
@Test
public void addMonster() {
for (int i = 0; i < 2; i++) {
Monster monster = new Monster();
monster.setAge(10 + i);
monster.setBirthday(new Date());
monster.setEmail("[email protected]");
monster.setGender(1);
monster.setName("大象精-" + i);
monster.setSalary(1000 + i * 10);
monsterMapper.addMonster(monster);
System.out.println("添加对象--" + monster);
System.out.println("添加到表中后, 自增长的id=" + monster.getId());
}
//如果是增删改, 需要提交事务
if(sqlSession != null) {
sqlSession.commit();
sqlSession.close();
}
System.out.println("保存成功...");
}
看看是否可以添加成功, 这时可能会出现找不到Xxxxmapper.xml 错误, 分析原因:
在父工程的pom.xml 加入build 配置
在build中配置resources,来防止我们资源导出失败的问题
<build>
<resources>
<resource>
<directory>src/main/javadirectory>
<includes>
<include>**/*.xmlinclude>
includes>
resource>
<resource>
<directory>src/main/resourcesdirectory>
<includes>
<include>**/*.xmlinclude>
<include>**/*.propertiesinclude>
includes>
resource>
resources>
build>
上面不成功,切换maven目录
热门专栏推荐
第1篇 -MyBatis 介绍
MyBatis入门篇 MyBatis(简化数据库操作的持久层框架)–快速入门[上]
文章到这里就结束了,如果有什么疑问的地方欢迎指出,诸大佬们一起来评论区一起讨论
希望能和诸大佬们一起努力,今后我们一起观看感谢您的阅读
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力