mybatis学习笔记之——连接SQL server数据库(IDEA)

我们新建一个普通的项目,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:

<?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="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
                <property name="url" value="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=mybatis"/>
                <property name="username" value="sa"/>
                <property name="password" value="sa123456"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 将我们写好的sql映射文件注册到全局配置文件中 -->
    <mappers>
        <mapper resource="EmployeeMapper.xml"/>
    </mappers>
</configuration>

这个配置文件中指定了我们要连接的数据库为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:

<?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">
    <!--
    namespace:名称空间;指定为接口的全类名
    id:唯一标识
    resultType:返回值类型
    #{id}:从传递过来的参数中取出id值
    -->
    <mapper namespace="com.test.mybatis.dao.EmployeeMapper">
    <select id="getEmpById" resultType="com.test.mybatis.bean.Employee">
        select id,last_name lastName,email,gender from tbl_employee where id = #{id}
    </select>
</mapper>

这里我们为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。

猜你喜欢

转载自blog.csdn.net/wangruoao/article/details/83089283