发表于: 2017-02-24 09:15:15

3 1968


.今天完成的

1.解决昨天的各种报错问题

2.学习mybatis的注解Annotation方法

3学习log4j

.明天的计划

1.mybatis注解annotation应用到项目中

2.log4j应用到项目中

3.学习Tomcat

.今天的收获

1.mybatis

mybatis让程序员将主要精力放在sql,通过mybatis提供的映射方式自由灵活生成(半自动化,大部分需要程序员编写sql)满足需要的sql语句;

mybatis可以将preparedStatement中的输入参数自动进行输入映射,将查询结果集灵活映射成java对象,(输出映射)

parameterType输入映射参数类型 resultType输出映射结果类型,输入映射和输出映射是mybatis核心内容

mybatis配置文件中#{}表示一个占位符

PO = persisent object 持久对象,可以看成是与数据库中的表相映射的java对象,类似于model层中的Student

selectOne表示查询出一条记录进行映射

selectLIist表示查询出一个列表(多条记录)进行映射;

insert into student(name,qq)values(#{name},#{qq}):

其中#{name}中指定pojo的属性

mysql自增主键,执行insert提交之前自动生成一个自增主键,通过mysql函数能够获取到刚

自增主键返回刚提交插入记录的自增主键:

LAST_INSERT_ID();

 

非自增主键返回

使用mysqluuid()方法生成主键,需要修改表中id字段为string,长度设置成35(?这个是为什么呢)

执行思路,先通过uuid查询到主键,将主键输入到sql语句中,相对于insert语句先执行!

 

2.总结mybatis学习

就任务一来讲你需要知道mybatis是一个框架,可以方便地连接数据库,替换之前在类中编写冗长的JDBC代码;

如何实现呢?对应到任务一中我们需要做什么呢?

1.首先引入jar

2.接下来需要在项目中新建两个配置文件

①新建立mybatis 配置文件:Configuration.xml,然后在空白的里面复制一些代码进去可以上网搜模板,大同小异,当然你也可以下载mybatis的源码包,里面有模板,目录为mybatis-3-mybatis-3.4.2\src\test\java\org\apache\ibatis\submitted\complex_property,

②同目录下还有一个user.xml配置文件,这也是我们接下来要用到的模板,同样将他复制到你的项目中,建议和Configuration.xml一起放到根目录下

3.jar, Configuration.xmluser.xml模板都配置好了之后,接下来就是针对任务一需要做的工作了,

①你需要在Configuration.xml中把

 <property name="driver" value=   url value=   username value=   password" value=

这几行修改成你自己的数据库参数

  ②还是在Configuration.xml, 加上 <mappers> “这里填user.xml的路径”</mappers>

4.到这一步,其实已经可以访问数据库了,已经可以替代之前的链接数据库方式了,首先新建一个用于实现数据库交互的DBAccess

public class DBAccess {

     public SqlSession getSqlSession() throws IOException{

         //通过配置文件获取数据库连接相关信息

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

         //通过配置信息构建SqlsessionFactory

     SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);

         //通过SqlsessionFactory打开数据库会话

         SqlSession sqlSession = sqlSessionFactory.openSession();

         return sqlSession;    

5.实现增删改查方法还需要配置user.xml文件

(当然,前提是你之前就写好了dao,service,model,能够实现增删改查,这样我们才能够用mybatis替换一些之前繁琐的代码)

接下来我们以替换实现类中的添加学员→add()方法为例

首先把命名空间修改成你dao类地址:<mapper namespace="com.jnshu.dao.DaoStudent">

需要打开user.xml把模板中insert的内容修改为

<insert id="add" parameterType="com.jnshu.model.Student" >

  <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">

  SELECT LAST_INSERT_ID()

  </selectKey>

  insert into student(name,qq)values(#{name},#{qq}) 

  </insert>

不明白里面标签什么意思不要紧,先照瓢画葫做一遍,可能你就理解了

说明:insert id = “”这里填你的方法名,名字是唯一标识

parameterType=”” 输入映射参数类型,这里填你的po类名,student类从src开始的目录

<selectKey里面的内容是为了调用方法返回的ID值为你添加的studentID,如果你添加这些内容,不会报错但是你得到的返回ID永远是0

下一行写的是sql语句了,和你之前在类中写sql语句没什么区别,但要了解一下#()占位符

至此,配置文件已经完成了,接下来只需要在类中简单代码一下就可以替换add()方法了

将实现类中原add()方法修改为:

    public long add(Student c) {

       DBAccess dbAccess =new DBAccess();

       SqlSession sqlSession = null;

       try {

           sqlSession = dbAccess.getSqlSession();

           //

            sqlSession.insert("com.jnshu.dao.DaoStudent.add", c);

       } catch (IOException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }finally {

           if (sqlSession != null) {

              sqlSession.commit();

              sqlSession.close();

           }

       }

       return c.getId();   

    }

至此add方法替换完毕,可以写个主方法测试一下了

控制台输出返回的ID

.遇到的问题

1.通过id查找学生输出学生信息为null;

代码如下

xml配置如下

实现类如下



返回列表 返回列表
评论

    分享到