我们新建一个普通的项目,File --> New --> Project -->Java --> Java EE。然后新建项目即可。
项目完成后我们新建一个conf文件夹,用来存放配置信息,新建一个lib文件夹,用来存放jar包。
我们将mybatis的jar包,连接SQL server数据库的sqljdbc的jar包,打印日志的log4j的jar包以及测试相关的junit的jar包复制到lib文件夹下,然后将lib文件夹下的jar包加入到项目中。
将log4j的配置文件放到conf文件夹下:
log4j.properties:
### 设置###
log4j.rootLogger = debug,stdout,D,E
### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
### 输出DEBUG 级别以上的日志到=E://logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = D://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### 输出ERROR 级别以上的日志到=E://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =D://logs/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
在conf文件夹下增加mybatis的配置信息文件mybatis-config.xml:
这个配置文件中指定了我们要连接的数据库为SQL server数据库,还指定了我们要连接的数据库名,用户名,密码。sql映射文件是要在后面写到这里的,这里已经写出,后面再描述。
我们在数据库中新建表tbl_employee,表结构如下:
然后我们在表中插入一条数据,这里插入的是:
INSERT INTO tbl_employee VALUES(2,0,4);
然后我们编写相关代码:
首先建立实体类Employee.java:
public class Employee {
private Integer id;
private String lastName;
private String email;
private String gender;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Employee{" +
"id=" + id +
", lastName='" + lastName + '\'' +
", email='" + email + '\'' +
", gender='" + gender + '\'' +
'}';
}
}
这里的lastName和数据库中的last_name是不相同的,会导致最后查询出的last_name为空。
然后编写相关接口EmployeeMapper:
public interface EmployeeMapper {
public Employee getEmpById(Integer id);
}
然后我们在conf下增加一个配置文件,用来进行sql映射EmployeeMapper.xml:
这里我们为last_name取别名为lastName,这样我们就可以取到last_name的值了,并且在上面,我们已经将这个sql映射EmployeeMapper.xml文件注册到了全局配置mybatis-config.xml文件中。
最后我们编写一下测试类MyBatisTest.java:
public class MyBatisTest {
public SqlSessionFactory getSqlSessionFactory() throws IOException{
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
return new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void test01() throws IOException{
//1.获取SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
//2.获取sqlSession对象
SqlSession openSession = sqlSessionFactory.openSession();
try{
//3.获取接口的实现类对象
//会为接口自动创建一个代理对象,代理对象去执行增删改查方法
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
Employee employee = mapper.getEmpById(1);
System.out.println(mapper.getClass());
System.out.println(employee);
}finally {
openSession.close();
}
}
}
工程结构如下图所示:
测试结果如下图:
我们通过控制台输出的类名,可以看出这里会为接口自动创建一个代理对象,代理对象去执行增删改查方法。
最后总结一下:
1.接口式编程。
原生 Dao ===》 DaoImpl
mybatis Mapper ===》 xxMapper.xml
2.sqlSession代表和数据库的一次会话,完成后需要将资源释放。
3.sqlSession和connection一样,都是非线程安全的。每次使用都应该去获取新的对象,不要设置为成员变量。
4.mapper接口没有实现类,但是mybatis会为这个接口生成一个代理对象(将接口和xml文件绑定)。
5.两个重要的配置文件:
mybatis的全局配置文件:包含数据库连接池信息,事务管理信息等。系统运行环境信息。
SQL映射文件:保存了每一个SQL的语句映射信息。通过此映射文件将sql抽取出来。
注:此文章为【尚硅谷_MyBatis_入门到进阶】学习笔记。原视频中是Java代码,连接的数据库是Mysql,开发工具为eclipse。因个人学习需求,此文章为Java代码,但是数据库是SQL server,开发工具用的是IDEA。