MyBatis 是一个支持普通SQL查询、存储过程以及高级映射的持久层框架,它消除了几乎所有的JDBC 代码和参数的手动设置以及对结果集的检索,并使用简单的XML 或注解进行配置和原始映射,用以将接口和Java的POJO(Plain Old Java Object,普通Java 对象)映射成数据库中的记录,使得Java开发人员可以使用面向对象的编程思想来操作数据库。
归纳总结一下
CREATE TABLE users( id int(32) PRIMARY KEY AUTO_INCREMENT, username varchar(50), job varchar(50), phone varchar(16) ); INSERT INTO users VALUES(1,'f','b','110'); INSERT INTO users VALUES(2,'fo','ba',120); INSERT INTO users VALUES(3,'foo','bar',119);
# Global logging configuration log4j.rootLogger=ERROR, stdout # MyBatis logging configuration log4j.logger.com.ssm=DEBUG Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
<?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="tech.rpish.mapper.UserMapper"> <select id="findUserById" parameterType="Integer" resultType="tech.rpish.po.User"> select * from users where id=#{id} </select> </mapper>
<?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="mysql"> <environment id="mysql"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/spring_db" /> <property name="username" value="root" /> <property name="password" value="pass" /> </dataSource> </environment> </environments> <mappers> <mapper resource="tech.rpish.mapper.UserMapper.xml"/> </mappers> </configuration>
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 org.junit.Test; import tech.rpish.po.User; import java.io.InputStream; public class MyBatisTest { @Test public void findUserByIdTest() throws Exception { // 读配置文件 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); // 根据配置文件构建SqlSessionFactory Instance SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 公共SqlSessionFactory创建SqlSession Instance SqlSession sqlSession = sqlSessionFactory.openSession(); // sqlSession执行映射文件中定义的sql,并返回结果 User user = sqlSession.selectOne("tech.rpish.mapper.UserMapper.findUserById", 1); // 输出结果 System.out.println(user); // 关闭sqlSession sqlSession.close(); } }
调试运行,就能查询到结果了.
然后记得要修改mybatis配置文件中mapper的资源路径
Okay,这就是大致的一个过程,然后上面这是findUserById的Demo,那大家可以仿照着写下findAllUsers,addUser,deleteUser,updateUser
(只要修改mapper.xml,然后写测试类就可以了)
然后,如果遇到卡壳,可以参考下我发到github的demo
InputStream inputStream = Resources.getResourceAsStream("ConfigurationFile"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream)
<configuration xmlns="http://mybatis.org/schema/mybatis-config"> <!-- 属性--> <properties></properties> <!-- 设置--> <settings></settings> <!-- 类型命名--> <typeAliases></typeAliases> <!-- 类型处理器--> <typeHandlers></typeHandlers> <!-- 对象工厂--> <objectFactory type=""></objectFactory> <!-- 插件--> <plugins></plugins> <!-- 配置环境(事务管理器,数据源)--> <environments default=""> <environment id=""> <transactionManager type=""></transactionManager> <dataSource type=""></dataSource> </environment> </environments> <!-- 数据库厂商标识符--> <databaseIdProvider type=""></databaseIdProvider> <!-- 映射器--> <mappers></mappers> </configuration>
<mapper resource="tech/rpish/mapper/Mapper.xml" />
<mapper url=file:///C:/SSM-bootstrap/mapper/Mapper.xml />
<mapper class="tech.rpish.mapper.Mapper" />
<package name"tech.rpish.mapper" />
mybatis的动态sql就是对sql语句动态组装的功能.
通过使用OGNL Expression+tags 对sql语句进行逻辑判断,代替开发人员手动拼接sql语句.
大致有如下几类:
具体demo,详见:Commit:MyBatis-2 动态SQL · rpishgithub/SSM-bootstrap@d314427
我们常用的查询不可能总像getUsernameById这么简单,时常要处理复杂类型和多张表多个对象间的复杂的关系.
这时候就要用到mybatis的关联映射来处理对象间的一对一,一对多,多对多关联关系了.
mybatis有两种加载关联关系的方式:
一对一关系通常在resultMap中添加association嵌套查询或嵌套结果
一对多和多对多则是利用resultMap中的collection,它的大部分属性association相同,不同的是它的ofType属性,它与javaType属性对应,用于指定实体对象中集合类属性所包含的元素类型.
具体使用,详见:
然后提一下注意事项
mapper.xml
namespace同名的mapper接口,声明一方法与查询名参数返回类型对应这上边只是我看书上讲mybatis做的笔记,更多具体内容还得看官方文档.
mybatis – MyBatis 3 | 简介
然后,肯定会接触到一些sql语句,这部分可以看菜鸟教程
MySQL 教程 | 菜鸟教程 (runoob.com)