发表于: 2017-09-22 22:46:45
2 810
今日完成的事情:
通过回顾注解学习mybatis概念流程,学习关联Java常用术语概念
在这说一下用JDBC访问数据库,除了需要自己写SQL之外,还必须操作Connection, Statment, ResultSet 这些其类来完成。不仅如此,访问不同的表,还会写很多类似重复的代码,效率低。 用了Mybatis之后,只需要写SQL语句,而建立连接这一类工作,都由给Mybatis来完成;,同时那些重复性的工作也有Mybatis完成;我们只需要关注在增删改查的操作层上,把技术细节都封装了。术语; 消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装; 简单的XML或注解用于配置和原始映射,将接口和Java的POJO对象映射成数据库中的记录。
封装;
属性可用来描述同一类事物的特征,方法可描述一类事物可做的操作,一般来说,一个对象拥有两个方法,分别用于获取和设置某个值。封装就是把属于同一类事物的共性(包括属性与方法)归到一个类中,以方便使用。而我们在设置变量的属性时,我们通常会对数据进行封装,当然也会增加数据访问限制,同时增加程序可维护性。而实现方法就是:用private去修饰一个变量,然后再用setter方法去设置该变量的值,然后在用getter方法去调用该变量的值。即Getter和Setter可以快速获取或设置一个对象的数据。例如;
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表就是对应实体类,实体类的属性和表的字段名称应一一对应,这里就是用到上面提到的封装getter和setter,快速获取设置对象的数据
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指定一个唯一的namespace,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的如;namespace="me.gacl.mapping.userMapper"就是me.gacl.mapping(包名)+userMapper
<mapper namespace="me.gacl.mapping.userMapper">
在select标签中编写查询的SQL语句,设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复,使用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);
创建能执行映射文件中sql的sqlSession
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相关概念术语
遇到的问题及解决方法:
没有操作,只是复习概念,全程百度背锅
收获:
概念理解多了,体系也慢慢会有
评论