MyBatis是一个操作数据库的ORM框架,在这里一个类对应一个表,类的属性对应表的属性
使用步骤
1.编写bean类
举例:
public class BeanTest {
private int id;
private String name;
private String pwd;
public BeanTest(){}
// 需要有一个无参构造方法
public BeanTest(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
...
// setter和getter方法
}
2.配置文件
需要配置两个文件:conf.xml和mapper.xml
mapper.xml
通过在类下的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">
<!-- 前面默认 -->
<mapper namespace="com.test.beanMapper">
<!-- 映射文件路径,文件名不需要后缀 -->
<select id="testId" resultType="com.test.BeanTest" parameterType="int">
<!-- select查询语句,返回值类型是BeanTest类,传入参数类型是int -->
select * from bean where id = #{id}
</select>
</mapper>
conf.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>
<!-- environments的default代表当前开发环境,在这个标签下可以配置多个开发环境,
然后要使用哪个开发环境时就把default的值设置成那个开发环境environment的id即可 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<!-- 使用数据库连接池,也可以设置UNPOOLED从而不使用数据库连接池 -->
<dataSource type="POOLED">
<!-- 配置数据库信息 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/ssm?useSSL=true"/>
<!-- 使用旧的jdbc驱动报错,于是使用新的,而在新的驱动里需要设置useSSH值为true -->
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 加载映射文件 -->
<mapper resource="com/test/beanMapper.xml"/>
</mappers>
</configuration>
3.使用测试
首先需要读取conf.xml
配置文件,并构建数据库连接,然后在通过找到映射文件下的namaspace,指定语句id(中间用.
分隔),然后执行对应语句即可,代码示例:
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class Test {
public static void main(String[] args) throws IOException {
Reader reader = Resources.getResourceAsReader("conf.xml");
// 读取conf.xml文件
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(reader);
// 产生一个SqlSession对象用来进行数据库操作
SqlSession session = ssf.openSession();
// 打开数据库连接
String statement = "com.test.beanMapper.testId";
// 映射文件下的namespace.id对应的sql语句
BeanTest bt = session.selectOne(statement, 1);
// 查询语句,只有一个返回值
System.out.println(bt.getName());
session.close();
}
}
数据库操作
在完成MyBatis映射后,数据库操作只需要在mapper.xml文件中进行编写即可
增
mapper.xml中示例:
<insert id="insertTestId" parameterType="com.test.BeanTest">
<!-- 插入一个对象 -->
insert into bean(id, name, pwd) values(#{id}, #{name}, #{pwd})
</insert>
测试示例:
public static void main(String[] args) throws IOException {
Reader reader = Resources.getResourceAsReader("conf.xml");
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = ssf.openSession();
String statement = "com.test.beanMapper.insertTestId";
BeanTest b = new BeanTest(2, "aaa", "bbb");
int count = session.insert(statement, b);
// 返回受影响行数
session.commit();
// 需要提交后才会真正写入数据库
System.out.println(count);
session.close();
}
删
<delete id="deleteTestId" parameterType="com.test.BeanTest">
delete from bean where id = #{id}
</delete>
改
<update id="updateTestId" parameterType="String">
update bean set pwd = #{xxx}
</update>
查
<select id="selectTestId" resultType="com.test.BeanTest">
select * from bean
</select>
测试示例:
...
List<BeanTest> lb = session.selectList(statement);
for(BeanTest bt: lb){
System.out.println(bt);
}
映射标签属性
parameterType
传入的参数类型,只能有一个属性,所以在sql语句要传入多个参数时,可以设置传入的参数类型为类或者列表等,但传入类时,在sql语句当中的参数名则必须为类中的属性
resultType
返回结果类型,和上面同理
逆向工程
在Mybatis中,提供了专门的jar包可用于通过表、类、接口和映射文件的其中一个来自动生成其他三个文件
使用步骤
1.导入相关jar包
主要包括:mybatis-generator-core
、mybatis
和jdbc连接的jar包
2.配置文件
一般取名为generator.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" />
<!-- true代表映射有注释 -->
</commentGenerator>
<!-- 数据库连接信息 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/ssm?useSSL=true" userId="root"
password="123456">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
<!-- 是否需要将表中的DECIMAL和NUMERIC类型转为BigDecimal,false则默认为Integer类型 -->
</javaTypeResolver>
<!-- targetProject属性值:实体类的生成位置 targetPackage属性值:实体类所在包的路径 -->
<javaModelGenerator targetPackage="org.test"
targetProject=".\src">
<!-- 生成类文件的位置和包名 -->
<property name="trimStrings" value="true" />
<!-- 是否对结果进行trim操作,即删除两边的空格 -->
</javaModelGenerator>
<sqlMapGenerator targetPackage="org.test" targetProject=".\src">
<!-- 生成映射文件的位置和包名 -->
</sqlMapGenerator>
<javaClientGenerator type="XMLMAPPER"
targetPackage="org.test" targetProject=".\src">
<!-- 生成动态代理的接口的位置和包名,type是生成的接口类型 -->
</javaClientGenerator>
<!-- 指定数据库表 -->
<table tableName="bean">
</table>
</context>
</generatorConfiguration>
3.编写执行类
public static void main(String[] args) throws IOException, XMLParserException, InvalidConfigurationException, SQLException, InterruptedException {
File f = new File("./src/generator.xml");
// 读取配置文件
List<String> warnings = new ArrayList<String>();
// 存储警告信息
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(f);
DefaultShellCallback callback = new DefaultShellCallback(true);
// true为出现新内容时覆盖
MyBatisGenerator generator = new MyBatisGenerator(config, callback, warnings);
generator.generate(null);
}
网友评论