发表于: 2017-09-22 22:46:45

2 811


今日完成的事情:

通过回顾注解学习mybatis概念流程,学习关联Java常用术语概念

在这说一下用JDBC访问数据库,除了需要自己写SQL之外,还必须操作Connection, Statment, ResultSet 这些其类来完成。不仅如此,访问不同的表,还会写很多类似重复的代码,效率低。 用了Mybatis之后,只需要写SQL语句,而建立连接这一类工作,都由给Mybatis来完成;,同时那些重复性的工作也有Mybatis完成;我们只需要关注在增删改查的操作层上,把技术细节都封装了。术语; 消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装; 简单的XML或注解用于配置和原始映射,将接口和JavaPOJO对象映射成数据库中的记录。

 

封装;

属性可用来描述同一类事物的特征,方法可描述一类事物可做的操作,一般来说,一个对象拥有两个方法,分别用于获取和设置某个值。封装就是把属于同一类事物的共性(包括属性与方法)归到一个类中,以方便使用。而我们在设置变量的属性时,我们通常会对数据进行封装,当然也会增加数据访问限制,同时增加程序可维护性。而实现方法就是:用private去修饰一个变量,然后再用setter方法去设置该变量的值,然后在用getter方法去调用该变量的值。即GetterSetter可以快速获取或设置一个对象的数据。例如;

public class Student{

              private String number;

//学生学号

              private String name;

//学生姓名

              public Student(){

              }

              public String getNumber(){

                     return number;

//get方法得到学号

              }

              public void setNumber(String number){

                     this.number=number;

//set方法去设置学号

              }

              public String getName(){

//get方法得到姓名

                     return name;

              }

              public void setName(String name){

                     this.name=name;

//set方法去设置姓名

 

类和接口以及对象

类描述了一个实体,包括实体的状态,也包括实体可能发出的动作。接口定义了一个实体可能发出的动作。但是只是定义了这些动作的原型,没有实现,也没有任何状态信息;所以接口有点象一个规范、一个协议,是一个抽象的概念;而类则是实现了这个协议,满足了这个规范的具体实体,是一个具体的概念。从程序角度,简单理解,接口就是函数声明,类就是函数实现。需要注意的是同一个声明可能有很多种实现。而对象的本质就是类的实例,比如所有的人统称为人类,这里的人类就是一个类(物种的一种类型),而具体到每个人,比如张三这个人,它就是对象,就是人类的实例。

 

Mybatis流程;导入jar包:Mybatis-jar/mysql-connector-jar,配置文件mybatis-config.xml,创建实体类user,定义操作users表的sql映射文件userMapper.xml测试类TestMybatis

直观来说应用程序找Mybatis要数据,mbatis从数据库中找来数据;先是通过mybatis-config.xml 定位哪个数据库,然后通userMapper.xml执行对应的select语句,基于 userMapper.xml把返回的数据库记录封装在userMapper对象中,最后把多个对象装在一个userMapper集合中; 返回。

 

其中jar包就是别人已经写好的一些类,然后将这些类进行打包,将这些jar包引入你的项目中,就可以直接使用这些jar包中的类和属性以及方法。

 

Config.xml文件主要是配置数据库连接信息

<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="1234" />

 

User就是对应实体类,实体类的属性和表的字段名称应一一对应,这里就是用到上面提到的封装gettersetter,快速获取设置对象的数据

    private int id;

    private String name;

    private int age;

 

    public int getId() {

        return id;

    }

 

    public void setId(int id) {

        this.id = id;

    }

 

    public String getName() {

        return name;

    }

然后是定义操作users表的sql映射文件userMapper.xml

这里为这个mapper指定一个唯一的namespacenamespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的如;namespace="me.gacl.mapping.userMapper"就是me.gacl.mapping(包名)+userMapper

<mapper namespace="me.gacl.mapping.userMapper">

 

select标签中编写查询的SQL语句,设置select标签的id属性为getUserid属性值必须是唯一的,不能够重复,使用parameterType属性指明查询时使用的参数类,resultType属性指明查询返回的结果集类型,resultType="me.gacl.domain.User"就表示将查询结果封装成一个User类的对象返回。User类就是users表所对应的实体类,根据id查询得到一个user对象

<select id="getUser" parameterType="int"  resultType="me.gacl.domain.User">

select * from users where id=#{id}


 这里还要在con.xml中注册userMapper.xml文件,userMapper.xml位置注明,也就是包名       

<mapper resource="me/gacl/mapping/userMapper.xml"/>

 

最后是测试

        mybatis的配置文件

        String resource = "conf.xml";

 

        使用类加载器加载mybatis的配置文件,也加载关联的映射文件

        InputStream is = Test1.class.getClassLoader().getResourceAsStream(resource);

 

        构建sqlSession的工厂

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

 

        创建能执行映射文件中sqlsqlSession

        SqlSession session = sessionFactory.openSession();

     

       映射sql的标识字符串,me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的        值,getUser是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL

        String statement = "me.gacl.mapping.userMapper.getUser"; 

      

       执行查询返回一个唯一user对象的sql

        User user = session.selectOne(statement, 1);

        System.out.println(user);

 

明日计划的事情:

继续深入学习spring,连带着复习Java相关概念术语

 

遇到的问题及解决方法:

没有操作,只是复习概念,全程百度背锅

 

收获:

概念理解多了,体系也慢慢会有

 



返回列表 返回列表
评论

    分享到