发表于: 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();
非自增主键返回
使用mysql的uuid()方法生成主键,需要修改表中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.xml和user.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值为你添加的student的ID值,如果你添加这些内容,不会报错但是你得到的返回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配置如下
实现类如下
评论