mybatis 常用方法
文章目录
SqlSessionfactoryBuilder
SqlSesionfactory
SqlSession
Type interface com.mybatis.mapper.UserMapper is not known to the MapperRegistry. 解决方法
在使用mybatis的时候,遇到了这个问题,大概的意思是com.mybatis.mapper.UserMapper这个接口没有被注册所以找不到。
一开始没有认真的翻译错误原因。。。所以搞了很久发现无论是测试代码还是mapper。xml文件都没有问题,最后仔细看了下bug的cause,才发现的全局配置文件的问题,需要把mapper。xml注册到全局配置文件的中:
<mappers>
<mapper class="com.atguigu.mapper.UserMapper"></mapper>
</mappers>
MBG(mybatis generator) mybatis逆向工程 的详情及使用
1.介绍
MyBatis逆向工程,简称MBG。是一个专门为MyBatis框架使用者定制的代码生成器。可以快速的根据表生成对应的映射文件,接口,以及Bean类对象。
在Mybatis中,是一个可以自动对单表生成的增,删,改,查代码的插件。
叫 mybatis-generator-core-1.3.2。
它可以帮我们对比数据库表之后,生成大量的这个基础代码。
这些基础代码有:
1、数据库表对应的javaBean对象
2、这些javaBean对象对应的Mapper接口
3、这些Mapper接口对应的配置文件
2.使用
1导入jar包 mybatis-generator-core-1.3.2.jar
2.配置文件(需要修改的地方)
需要手动更改:
2.1.数据库连接的属性信息(jdbcConnection)(driverClass="com.mysql.jdbc.Driver、 connectionURL=“jdbc:mysql://localhost:3306/mbg”、 userId=“root”、 password=“root”)
2.2.javaModelGenerator标签是JavaBean的生成配置
targetPackage 生成的类的包名
targetProject 生成的类在哪个模块目录下
2.3. sqlMapGenerator标签是生成mapper.xml配置文件的
targetPackage 生成的配置文件在哪个包名下
targetProject 生成的文件在哪个模块目录下
2.4.javaClientGenerator标签配置生成的mapper接口信息
targetPackage 包名
targetProject 哪个模块目录下
2.5. 一个table标签表示一个表
tableName表示表名
domainObjectName表示生成的类名
2.6.
放在context上下文 标签下 comment:【计算机】注解
<!-- 去掉全部的注释 -->
<commentGenerator>
<property name="suppressAllComments" value="true" />
</commentGenerator>
这个配置文件一般建在项目目录下 mbg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<context id="DB2Tables" targetRuntime="MyBatis3">
<!-- 去掉全部的注释 -->
<commentGenerator>
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--
修改数据库连接的属性信息
-->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mbg"
userId="root"
password="root">
</jdbcConnection>
<javaTypeResolver >
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!--
javaModelGenerator标签是JavaBean的生成配置
targetPackage 生成的类的包名
targetProject 生成的类在哪个模块目录下
-->
<javaModelGenerator targetPackage="com.atguigu.pojo"
targetProject=".\08-mybatis-mbg\src">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!--
sqlMapGenerator标签是生成mapper.xml配置文件的
targetPackage 生成的配置文件在哪个包名下
targetProject 生成的文件在哪个模块目录下
-->
<sqlMapGenerator targetPackage="com.atguigu.mapper"
targetProject=".\08-mybatis-mbg\src">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!--
javaClientGenerator标签配置生成的mapper接口信息
targetPackage 包名
targetProject 哪个模块目录下
-->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.atguigu.mapper"
targetProject=".\08-mybatis-mbg\src">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!--
一个table标签表示一个表
tableName表示表名
domainObjectName表示生成的类名
-->
<table tableName="t_user" domainObjectName="User" />
<table tableName="t_book" domainObjectName="Book" />
</context>
</generatorConfiguration>
执行代码
需要更改的代码 //读取配置文件
下面展示一些 内联代码片
。
//读取配置文件
File configFile = new File("./MBG/mbg.xml");
全部执行代码
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class MbgTest {
public static void main(String[] args) throws Exception {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
//读取配置文件
File configFile = new File("./MBG/mbg.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
}
}
生成的mapper接口 中方法的使用
public class Test {
SqlSessionFactory factory =null;
@Before
public void init() throws IOException {
SqlSessionFactoryBuilder sfb=new SqlSessionFactoryBuilder();
//读取主配置文件
InputStream inputStream= Resources.getResourceAsStream("mybatis-config.xml");
//通过配置文件的信息构建工厂类
factory = sfb.build(inputStream);
}
@org.junit.Test
public void t1(){
SqlSession session = factory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
// int count = mapper.countByExample(null);
// System.out.println("count="+count);
//==================
// User user = mapper.selectByPrimaryKey(2);
// System.out.println("user= "+user);
//==================
//当前的对象中保存的
UserExample userExample = new UserExample();
// session.commit();
// session.close();
// criteria是内部类对象
UserExample.Criteria criteria =userExample.createCriteria();
List<Integer> ids = new ArrayList<>();
ids.add(1);
ids.add(2);
ids.add(3);
ids.add(4);
criteria.andIdIn(ids);
List<User> users = mapper.selectByExample(userExample);
}
}