3.1 快速⼊⻔
MyBatis官⽹地址:http://www.mybatis.org/mybatis-3/
3.1.1 开发步骤:
①添加MyBatis的坐标
②创建user数据表
③编写User实体类
④编写映射⽂件UserMapper.xml
⑤编写核⼼⽂件SqlMapConfig.xml
⑥编写测试类
3.1.1 环境搭建:
1)导⼊MyBatis的坐标和其他相关坐标
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.encoding>UTF-8</maven.compiler.encoding> <java.version>1.8</java.version> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <!--mybatis坐标--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <!--mysql驱动坐标--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> <scope>runtime</scope> </dependency> <!--单元测试坐标--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!--⽇志坐标--> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </dependency>
2) 创建user数据表
-- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) DEFAULT NULL, `password` varchar(50) DEFAULT NULL, `birthday` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES ('1', 'lucy', '123', '2019-12-12'); INSERT INTO `user` VALUES ('2', 'tom','123', '2019-12-12');
3) 编写User实体
public class User { private int id; private String username; private String password; //省略get个set⽅法 }
4)编写UserMapper映射⽂件
<?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="userMapper"> <select id="findAll" resultType="com.lagou.domain.User"> select * from User </select> </mapper>
5) 编写MyBatis核⼼⽂件
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN“ "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql:///test"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/lagou/mapper/UserMapper.xml"/> </mappers> </configuration>
6) 编写测试代码
//加载核⼼配置⽂件 InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml"); //获得sqlSession⼯⼚对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); //获得sqlSession对象 SqlSession sqlSession = sqlSessionFactory.openSession(); //执⾏sql语句 List<User> userList = sqlSession.selectList("userMapper.findAll"); //打印结果 System.out.println(userList); //释放资源 sqlSession.close();
3.1.4 MyBatis的增删改查操作
MyBatis的插⼊数据操作
1)编写UserMapper映射⽂件
<mapper namespace="userMapper"> <insert id="add" parameterType="com.lagou.domain.User"> insert into user values(#{id},#{username},#{password}) </insert> </mapper>
2)编写插⼊实体User的代码
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); SqlSession sqlSession = sqlSessionFactory.openSession(); int insert = sqlSession.insert("userMapper.add", user); System.out.println(insert); //提交事务 sqlSession.commit(); sqlSession.close();
3)插⼊操作注意问题
•插⼊语句使⽤insert标签
•在映射⽂件中使⽤parameterType属性指定要插⼊的数据类型
•Sql语句中使⽤#{实体属性名}⽅式引⽤实体中的属性值
•插⼊操作使⽤的API是sqlSession.insert(“命名空间.id”,实体对象);
•插⼊操作涉及数据库数据变化,所以要使⽤sqlSession对象显示的提交事务,即sqlSession.commit()
3.1.5 MyBatis的修改数据操作
1)编写UserMapper映射⽂件
<mapper namespace="userMapper"> <update id="update" parameterType="com.lagou.domain.User"> update user set username=#{username},password=#{password} where id=# {id} </update> </mapper>
2)编写修改实体User的代码
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
int update = sqlSession.update("userMapper.update", user); System.out.println(update); sqlSession.commit(); sqlSession.close();
3)修改操作注意问题
•修改语句使⽤update标签
•修改操作使⽤的API是sqlSession.update(“命名空间.id”,实体对象);
3.1.6 MyBatis的删除数据操作
1)编写UserMapper映射⽂件
<mapper namespace="userMapper"> <delete id="delete" parameterType="java.lang.Integer"> delete from user where id=#{id} </delete> </mapper>
2)编写删除数据的代码
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml"); S
qlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
int delete = sqlSession.delete("userMapper.delete",3); System.out.println(delete); sqlSession.commit(); sqlSession.close();
3)删除操作注意问题
•删除语句使⽤delete标签
•Sql语句中使⽤#{任意字符串}⽅式引⽤传递的单个参数
•删除操作使⽤的API是sqlSession.delete(“命名空间.id”,Object);
3.1.7 MyBatis的映射⽂件概述
3.1.8 ⼊⻔核⼼配置⽂件分析:
MyBatis核⼼配置⽂件层级关系
3.1.9 MyBatis常⽤配置解析
1)environments标签
数据库环境的配置,⽀持多环境配置
其中,事务管理器(transactionManager)类型有两种:
•JDBC:这个配置就是直接使⽤了JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作⽤域。
•MANAGED:这个配置⼏乎没做什么。它从来不提交或回滚⼀个连接,⽽是让容器来管理事务的整个⽣命周期(⽐如 JEE 应⽤服务器的上下⽂)。 默认情况下它会关闭连接,然⽽⼀些容器并不希望这样,因此需要将 closeConnection 属性设置为 false来阻⽌它默认的关闭⾏为。
其中,数据源(dataSource)类型有三种:
•UNPOOLED:这个数据源的实现只是每次被请求时打开和关闭连接。
•POOLED:这种数据源的实现利⽤“池”的概念将 JDBC 连接对象组织起来。
•JNDI:这个数据源的实现是为了能在如 EJB 或应⽤服务器这类容器中使⽤,容器可以集中或在外部配
置数据源,然后放置⼀个 JNDI 上下⽂的引⽤。
2)mapper标签
该标签的作⽤是加载映射的,加载⽅式有如下⼏种:
•使⽤相对于类路径的资源引⽤,例如: <mapper resource="org/mybatis/builder/AuthorMapper.xml"/> •使⽤完全限定资源定位符(URL),例如: <mapper url="file:///var/mappers/AuthorMapper.xml"/> •使⽤映射器接⼝实现类的完全限定类名,例如: <mapper class="org.mybatis.builder.AuthorMapper"/> 将包内的映射器接⼝实现全部注册为映射器,例如: <package name="org.mybatis.builder"/>
3.1.10 Mybatis相应API介绍
SqlSession⼯⼚构建器SqlSessionFactoryBuilder 常⽤API:SqlSessionFactory build(InputStream inputStream)通过加载mybatis的核⼼⽂件的输⼊流的形式构建⼀个SqlSessionFactory对象
String resource = "org/mybatis/builder/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(inputStream);
其中, Resources ⼯具类,这个类在 org.apache.ibatis.io 包中。
Resources类帮助你从类路径下、⽂ 件系统或⼀个webURL中加载资源⽂件。
SqlSession⼯⼚对象SqlSessionFactory
SqlSessionFactory有多个个⽅法创建SqlSession实例。常⽤的有如下两个:
SqlSession会话对象
SqlSession实例在MyBatis中是⾮常强⼤的⼀个类。在这⾥你会看到所有执⾏语句、提交或回滚事务 和获取映射器实例的⽅法。
执⾏语句的⽅法主要有:
操作事务的⽅法主要有:
void commit() void rollback()
3.2Mybatis的Dao层实现
3.2.1传统开发⽅式
编写UserDao接⼝
public interface UserDao { List<User> findAll() throws IOException; }
编写UserDaoImpl实现
public class UserDaoImpl implements UserDao { public List<User> findAll() throws IOException { InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); SqlSession sqlSession = sqlSessionFactory.openSession(); List<User> userList = sqlSession.selectList("userMapper.findAll"); sqlSession.close(); return userList; }
}
测试传统⽅式
@Test public void testTraditionDao() throws IOException {
UserDao userDao = new UserDaoImpl(); List<User> all = userDao.findAll(); System.out.println(all); }
3.2.2代理开发⽅式
代理开发⽅式介绍
采⽤ Mybatis 的代理开发⽅式实现 DAO层的开发,这种⽅式是我们后⾯进⼊企业的主流。
Mapper接⼝开发⽅法只需要程序员编写Mapper接⼝(相当于Dao接⼝),由Mybatis框架根据接⼝定义创建接⼝的动态代理对象,代理对象的⽅法体同上边Dao接⼝实现类⽅法。
Mapper接⼝开发需要遵循以下规范:
1) Mapper.xml⽂件中的namespace与mapper接⼝的全限定名相同
2) Mapper接⼝⽅法名和Mapper.xml中定义的每个statement的id相同
3) Mapper接⼝⽅法的输⼊参数类型和mapper.xml中定义的每个sql的parameterType的类型相同
4) Mapper接⼝⽅法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
编写UserMapper接⼝
测试代理⽅式
@Test public void testProxyDao() throws IOException { InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); SqlSession sqlSession = sqlSessionFactory.openSession(); //获得MyBatis框架⽣成的UserMapper接⼝的实现类 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); User user = userMapper.findById(1); System.out.println(user); sqlSession.close(); }
标签:xml,MyBatis,第三,mybatis,sqlSession,resourceAsStream,user,Mybatis,编写 From: https://www.cnblogs.com/eagle888/p/16906347.html