mybatis的使用

导入mybatis jar包,将配置文件Configuration.xml放到建好的包中,在其中配置好dataSouce,没有密码项自己加上。

<dataSource type="UNPLOOED">

   <property name = "driver" value="com.mysql.jdbc.Driver" />

   <property name = "url" value = "jdbc:mysql://localhost:3306/xsgl" />

   <property name = "username" value = "root" />

   <property name = "password" value = "aspirine" />

</dataSource>


对于DAO层,我们需要传递给他一个可以与数据库进行交互并且执行SQL语句的对象,我们通过Mybatis来提供这个对象,对象名为SqlSession。

SqlSession的作用:

能够向SQL语句传入参数。

//在先前的JDBC中,我们执行的都是一条预编译的SQL语句,我们都是通过一个ArrayList对象为sql语句设置预编译的参数。

执行SQL语句。

获取SQL语句结果。


获取SqlSession的步骤:

1、通过配置文件获取数据库信息。

2、通过配置文件构建SqlSessionFactory。

3、通过SqlSessionFactory打开数据库会话。

举个栗子:


public class DBAccess {

     public SqlSession getSqlSession () {

             //通过配置文件获取数据库信息。

           Reader reader =  Resources.getResourceAsReader("com/config/Configuration.xml");

            //通过配置文件信息构建SqlSessionFactory。

           SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(read);

           //打开数据库会话。

           SqlSession sqlSession = sessionFactory.openSession();

           return sqlSession;

          }

}


在DAO层中,我们就可以改写先前的JDBC代码。

public class StudentDAO {

      public List<Student> queryStudentList(String stuNumber, String stuName) {

        //实例化DBAccess

       DBAccess dbAccess = new DBAccess();

      //通过dbAccess获取sqlsession.

在DAO层我们需要处理掉异常。

SqlSession sqlSession = null;

将SqlSession写在外面,不然在finally中还需要将其关闭。  

try{

      sqlSession = dbAccess.getSqlSession();

       //执行SQL语句。

//我们所需要的查询语句现在通过mybatis来执行,在我们下载的的mybatis的测试包中可以找到一个User.xml的配置文件,具体路径我这里是mybatis-3-mybatis-3.4.5\src\test\java\org\apache\ibatis\submitted\complex_property。

我们将这个Users.xml配置文件新建一个包放到其目录下,


找到select标签那一块,我们将我们需要查询的sql语句对其进行替换,

然后这里我们设置一下id,id在整个mapper里面是唯一的,一条SQL语句只能有一个id,重复ID的情况下需要在不同的mapper中才能生效,我这里也把mapper的namespace属性改为了自己的名称student.

然后我们回到java代码块。


java代码的调用是用sqlSession

sqlSession.selectList("Student.queryStudentList");  //参数值为mapper的namespace值+select的id。

//然后我们还需要给每一个字段设值

也就是

这一块功能在mybatis中的实现。

首先,resultMap中的type属性的值就是我们设计的类的名称,我这里是com.imooc.bean.Student

resultMap的id可以与select的id重名,我给的是StudentResult。

在我们建的表中,如果我们的列是主键的话,我们就设置id,如果是普通的列的话,就设置result标签,但他们里面的含义都相同。

column配的是数据的列名,preperty对应的是我们的实体类中的属性名,然后jdbcType对应的是在数据库中每一列的类型。


 然后我们看到select标签中的resultMap属性,很明显他是指向我们刚才的设定,所以我们把我们的id给定select的resultMap属性。

然后回到java块用List<student>存储。

}catch (IOException e) {

e.printStackTrace();

}finally{

//我们还需判断其是否为空

if(sqlSession != null) {

sqlsSession.close();

}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值