MyBatis(一)——搭建MyBatis框架
1.概念
JDBC中,SQL夹在Java代码里,耦合度高;维护不易,如果sql有变化,需要频繁修改。
MyBatis中,sql和Java编码分开,功能边界清晰,一个专注于业务,一个专注于数据
2.创建项目并导包
- MyBatis-3.4.2.jar(核心包,看名字就知道)
- log4j-1.2.17.jar(需要连同log4j.xml或者log4j.properties一起复制进项目,文件名不能改为别的,固定式log4j,内容不用管)
- mysql-connector-java.5.1.8.jar(连接数据库)
3.创建MyBatis的核心(全局)配置文件mybatis-config.xml
一般命名为mybatis-config.xml,配置,这个文件的作用是定义如何连接数据库。注意第2行是configuration,映射文件是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> <!--1.配置环境 ,默认的环境id为mysql --> <environments default="mysql"> <!--1.2.配置id为mysql的数据库环境 --> <environment id="mysql"> <!-- 使用JDBC的事务管理 --> <transactionManager type="JDBC" /> <!--数据库连接池 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mybatis" /> <property name="username" value="root" /> <property name="password" value="shoulinniao" /> </dataSource> </environment> </environments> <!--2.配置Mapper的位置 --> <mappers> <mapper resource="CustomerMapper.xml"/> </mappers> </configuration>
配置Mapper的位置也有其他写法,这里的CustomerMapper.xml和mybatis-config.xml在同一个文件夹下。CustomerMapper.xml也常和CustomerMapper.java放在同一个包下,如果此时还用resource标识,用[/]隔开,例如<mapper resource="com/atguigu/mybatis/mapper/CustomerMapper.xml" />;用class标识则用[.]隔开,根据指定Mapper接口注册,例如<mapper class="com.atguigu.mybatis.mapper.CustomerMapper"/>;用name标识可以一次配置多个在同一包下的mapper文件,例如<mapper name="com.atguigu.mybatis.mapper"/>
4.创建实体类Xxx.java
package com.atguigu.mybatis.bean; public class Customer { private Integer id; private String username; private String jobs; private String phone; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getJobs() { return jobs; } public void setJobs(String jobs) { this.jobs = jobs; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } @Override public String toString() { return "Customer [id=" + id + ", username=" + username + ", jobs=" + jobs + ", phone=" + phone + "]"; } } /* create table customer( id int primary key auto_increment, username varchar(50), jobs varchar(50), phone varchar(16) ); */
5.创建映射文件
一般命名为XxxMapper.xml,配置,Xxx是实体类的名字,这个文件的作用是定义如何操作数据库。
例如CustomerMapper.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.atguigu.mybatis.mapper.CustomerMapper"> <select id="selectById" resultType="com.atguigu.mybatis.bean.Customer"> select * from customer where id = #{id} </select> </mapper>
注意第2行是mapper,配置文件的是configuration;返回结果resultType最好加上包名
6.创建mapper接口,实现两个绑定
(1)接口名一般命名为XxxMapper.java,要和映射文件的namespace保持一致
(2)接口中的方法名要和SQL的id保持一致
package com.atguigu.mybatis.mapper; import com.atguigu.mybatis.bean.Customer; public interface CustomerMapper { Customer selectById(Integer id); }
7.获取MyBatis操作数据库的会话对象SqlSession
- 读取核心配置文件
- 创建SqlSessionFactory工厂对象
- 创建SqlSession对象
- 创建实体类的接口 的代理实现类
- 创建实体类对象存储查询结果
- 输出测试
package com.atguigu.mybatis.mapper; import static org.junit.Assert.*; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.Configuration; import org.apache.ibatis.session.ExecutorType; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.apache.ibatis.session.TransactionIsolationLevel; import org.junit.Test; import com.atguigu.mybatis.bean.Customer; public class MyBatisTest { @Test public void test() throws Exception { InputStream is=Resources.getResourceAsStream("mybatis-config.xml");//读取配置文件 SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(is);//构建工厂 SqlSession sqlSession=sessionFactory.openSession();//创建sqlSession CustomerMapper mapper=sqlSession.getMapper(CustomerMapper.class);//创建接口对象 Customer customer=mapper.selectById(1);//获取查询结果 System.out.println(mapper);//可以调用证明创建了实体类,这里用的是动态代理 System.out.println(customer);//输出查询结果 sqlSession.close();//关闭 } } /*输出 org.apache.ibatis.binding.MapperProxy@7d70d1b1 Customer [id=1, username=守林鸟, jobs=学生, phone=10086] */
8.目录结构
我就纳闷了,黑马教程给导入的包怎么就那么多?对于初学者能不能不要这么残忍。
参考&引用
学习资料:B站尚硅谷MyBatis视频