发表于: 2017-10-19 22:31:54
1 731
1;mybatis的学习应用
也是先说一下总体流程吧,目的是操作数据库,感觉与template类似吧,也算是一种封装;这两个都算是基于jdbc的,JDBC访问数据库就不多说了,除了需要自己写SQL之外,还必须操作一些辅助的类,访问不同的表,还会写很多雷同的代码,mybtis和template都是通过封装来简化这些。
仍然先看项目结构,这次就不用java项目了,昨天体会到了mvn项目的方便,各种jar包,全部自动化搞定;
准备实体类Student,用于映射数据库表Student
package big.dada.pojo;
public class Student
{
private int id;
private String name;
private int study_id;
private int qq;
public int getId()
配置文件mybatis-config.xml
<!--别名起一个替代作用,自动化扫描会用简单短语替换掉冗余的部分,
自动扫描big.dada.pojo下的类型,在后续配置文件.xml中使用resultType的时候,
直接用Student,而不用写全big.dada.pojo.Student-->
<typeAliases>
<package name="big.dada.pojo"/>
</typeAliases>
<!--表示当前是开发环境,会打印一些辅助日志信息,帮助调试-->
<environments default="development">
<environment id="development">
<!--作用主要是提供连接数据库用的驱动,数据库名称,编码方式,账号密码-->
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/task1?characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
</environments>
<!--映射Student.xml-->
<mappers>
<mapper resource="Student.xml"/>
</mappers>
配置文件Category.xml
<!--表示命名空间是big.dada.pojo,在后续调用sql语句的时候,会用到它,里面定义了一条sql语句-->
<mapper namespace="big.dada.pojo">
<!--sql语句用id: listCategory 标示供后续代码调用。resultType="Student"表示返回的数据和Student关联起来,-->
<!--这里本应该使用的是 big.dada.pojo.student, 但是因为上一步配置了别名,所以直接使用student就行了-->
<select id="listStudent" resultType="Student">
SELECT * FROM student
</select>
测试类Mybatis_Test_S
//根据配置文件mybatis-config.xml得到sqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//然后再根据sqlSessionFactory 得到session
SqlSession session = sqlSessionFactory.openSession();
//最后通过session的selectList方法,调用sql语句listStudent。
List<Student> ss = session.selectList("listStudent");
Foreach遍历,不是一个关键字,只是习惯上将这种特殊的for语句格式称之为“foreach”语句。foreach的语句格式:for(元素类型t 元素变量x : 遍历对象obj){引用了x的java语句;}
//执行完毕之后,得到一个Student集合,遍历看数据。
for (Student s : ss) {
System.out.println(s.getId() + " "+s.getName() +" "+ s.getStudy_id() +" "+ s.getQq());
}
结果,很ok
小结一下;只是一个简单的查询,来熟悉mybatis的整体流程,大体上就是应用程序找Mybatis要数据;mbatis从数据库中找来数据;mybatis-config.xml 定位数据库;Student.xml执行对应的select语句;把返回的数据库记录封装在Student对象中;接着把多个Student对象装在一个Student集合中;最后返回一个Student集合,通过遍历看数据。。
2;这个是完整的一套CRUD操作,在上面简单查询的基础上,会更容以接受学习吧,循序渐进,问题也不至于多到爆炸;大致流程与上面类似
首先是更改Student.xml, 提供CRUD对应的sql语句。(crud对应的插入sql语句,#{XXX}会自动获取new对象的XXX属性值)
<select id="listStudent" resultType="Student">
select * from student
</select>
<insert id="addStudent" parameterType="Student">
insert into student (id,name,study_id,qq)values (#{id},#{name},#{study_id},#{qq})
</insert>
<delete id="deleteStudent" parameterType="Student">
delete from student where id=#{id}
</delete>
<select id="getStudent" parameterType="int" resultType="Student">
select*from student where id=#{id}
</select>
<update id="updateStudent" parameterType="Student">
update Student set name = #{name} where id = #{id}
</update>
然后先用最简单的方法,写测试方法来实现,这里具体流程就不多说了,基本上类似
这是addStudent
这是deleteStudent
这是updateStudent,这里获取对象可以通过id,也可以通过下面selectone之后,直接更新,亲测有效
这是selectone,第一次报了空指针,因为没有id3
还有一个查询所有就是上面第一次单独做的,不说了。
3;上面的mybatis仍然看起来比较繁琐,实际上还可以利用接口来处理,也就是把xml修改为注解方式,这里暂时就不说了,明天再整理一下思路再贴。
明日计划的事情:
1;spring+mybatis的学习,暂时提交任务一
2;把spring那一块再看看
遇到的问题及解决方法:
1;黄线提示,实际上是可以通过编译但是比较臃肿的样子吧,直接alt+enter自己优化,与上次那几个下划线
类似
2;自动化提示有时候也会出错,要仔细一点,这个配置文件第一次就写错了,看了半天,复制别人就没毛病,自己打就出问题,最后重新来,发现用ctrl+space时,有时候提示出来的会有一个顺序。。。
3;第一次的错误,配置文件找不到,原因是吧这个xml放到另外一个包里面,放到resource里就没问题了,估计这是mvn的原因,搜索配置文件只会在resource里找,要是普通Java项目的话,表明路径应该可以。
4;就是调用的这些类,方法看不懂,,看源码更是懵逼,大致理解作用吧
先通过配置好的xml得到sqlSessionFactory,然后再根据sqlSessionFactory 得到session,最后通过session的selectList方法,调用sql语句list。。。。就是一堆乱调乱用。。。。。。
5;最后我惊奇的发现,我的日志没有打印指定位置。。。再仔细看就是根本没有打印。。
随后检查发现,靠着IDEA智能提示的log4j出问题了。。
改了之后,更新版本又惊奇的发现之前明明改了仓库位置,又自己变回中央仓库去了。。奇了怪了。。。下载龟速。。。
改好之后,很ok
6;最后还是一些小问题需要注意,大小写语法标点吧,细心就好
收获:
1;mybatis的;理解应用
2;解决问题的速度,有所提升
评论