发表于: 2017-10-19 22:31:54

1 730


今日完成的事情:

1mybatis的学习应用

也是先说一下总体流程吧,目的是操作数据库,感觉与template类似吧,也算是一种封装;这两个都算是基于jdbc的,JDBC访问数据库就不多说了,除了需要自己写SQL之外,还必须操作一些辅助的类,访问不同的表,还会写很多雷同的代码,mybtistemplate都是通过封装来简化这些。

仍然先看项目结构,这次就不用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();
//最后通过sessionselectList方法,调用sql语句listStudent
List<Student> ss = session.selectList("listStudent");


Foreach遍历,不是一个关键字,只是习惯上将这种特殊的for语句格式称之为“foreach”语句。foreach的语句格式:for(元素类型t 元素变量x : 遍历对象obj){引用了xjava语句;}

//执行完毕之后,得到一个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修改为注解方式,这里暂时就不说了,明天再整理一下思路再贴。

 

明日计划的事情:

1spring+mybatis的学习,暂时提交任务一

2;把spring那一块再看看


遇到的问题及解决方法:

1;黄线提示,实际上是可以通过编译但是比较臃肿的样子吧,直接alt+enter自己优化,与上次那几个下划线

类似


2;自动化提示有时候也会出错,要仔细一点,这个配置文件第一次就写错了,看了半天,复制别人就没毛病,自己打就出问题,最后重新来,发现用ctrl+space时,有时候提示出来的会有一个顺序。。。


3;第一次的错误,配置文件找不到,原因是吧这个xml放到另外一个包里面,放到resource里就没问题了,估计这是mvn的原因,搜索配置文件只会在resource里找,要是普通Java项目的话,表明路径应该可以。


4;就是调用的这些类,方法看不懂,,看源码更是懵逼,大致理解作用吧

先通过配置好的xml得到sqlSessionFactory,然后再根据sqlSessionFactory 得到session,最后通过sessionselectList方法,调用sql语句list。。。。就是一堆乱调乱用。。。。。。

 

5;最后我惊奇的发现,我的日志没有打印指定位置。。。再仔细看就是根本没有打印。。

随后检查发现,靠着IDEA智能提示的log4j出问题了。。

改了之后,更新版本又惊奇的发现之前明明改了仓库位置,又自己变回中央仓库去了。。奇了怪了。。。下载龟速。。。

改好之后,很ok


6;最后还是一些小问题需要注意,大小写语法标点吧,细心就好

 

收获:

1mybatis的;理解应用

2;解决问题的速度,有所提升

 

 

 



返回列表 返回列表
评论

    分享到