发表于: 2017-07-07 10:58:19
1 1162
今天完成的事:根据教程完成mybatis实现增删查改。
代码如下:
SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
</typeAliases>
<!-- 和Spring整合后environment配置都会被干掉 -->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理,目前由mybatis来管理 -->
<transactionManager type="JDBC" />
<!-- 数据库连接池,目前由mybatis来管理 -->
<dataSource type="POOLED">
<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="yubotao9527" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="User.xml" />
</mappers>
</configuration>User.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="test">
<!-- 需求:通过id查询用户 -->
<select id="findUserById" parameterType="int" resultType="mybatis.po.User">
select * from user where id = #{id}
</select>
<!-- 根据用户名称模糊查询用户信息,可能返回多条 -->
<select id="findUserByName" parameterType="java.lang.String" resultType="mybatis.po.User">
select * from user where username like '%${value}%'
<!--
${}:表示拼接sql串,将接收到的参数的内容不加任何的修饰拼接在sql中,${}中只能使用value,
但是使用${}来拼接sql,可能会引起sql注入,所以不建议使用这种方法。
-->
</select>
<!-- 添加用户 -->
<insert id="insertUser" parameterType="mybatis.po.User">
insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})
<!-- 将插入数据的主键返回,返回到user对象中 -->
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
select last_insert_id()
</selectKey>
<!--
<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
select uuid()
</selectKey>
-->
<!--
1 <insert>标签:用于执行数据库查询的,所有关于查询的都使用该标签。
2 parameterType:要传入一个具体的pojo(包括用户信息)
3 #{}中指定pojo的属性名,接收到pojo对象的属性值,mybatis通过OGNL获取对象的属性值。
4 <selectKey>标签:用来返回插入数据的主键的,实际中如果有获得主键的需要就可以使用它。
5 select last_insert_id():是sql函数,表示得到刚刚insert进去记录的主键值,只适用于自增主键。
6 keyProperty:表示将查询到主键值设置到上面parameterType指定的对象的哪个属性。
7 order:表示select last_insert_id()的执行顺序,是相对于insert语句来说的。
8 resultType:表示select last_insert_id()的结果类型。
-->
</insert>
<!-- 删除用户 -->
<delete id="deleteUser" parameterType="java.lang.Integer">
delete from user where id=#{id}
</delete>
<!-- 更新用户 -->
<update id="updateUser" parameterType="mybatis.po.User">
update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}
</update>
</mapper>User.java
这里又重载项User,原因是:在按ID查询时,查询字段为User[id,username,birthday,sex,address];而插入和更新操作等使用的是User[username,birthday,sex,address].
package mybatis.po;
import java.sql.Date;
/**
* Created by Administrator on 2017/07/07.
*/
public class User {
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
public int getId(){return id;}
public void setId(Integer id){this.id = id;}
public User(Integer id,String username, Date birthday, String sex, String address) {
this.id = id;
this.username = username;
this.birthday = birthday;
this.sex = sex;
this.address = address;
}
public User(String username, Date birthday, String sex, String address) {
this.username = username;
this.birthday = birthday;
this.sex = sex;
this.address = address;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", birthday=" + birthday +
", sex='" + sex + '\'' +
", address='" + address + '\'' +
'}';
}
}MybatisFirst.java
import mybatis.po.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Date;
import java.util.List;
/**
* Created by Administrator on 2017/07/07.
*/
public class MybatisFirst {
//因为接下来的测试代码中,获取sqlSession这部分都相同,所以抽取成一个方法
public SqlSession getSession() throws IOException {
String resource = "SqlMapConfig.xml"; //mybatis配置文件
//得到配置文件的流
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建会话工厂SqlSessionFactory,要传入mybaits的配置文件的流
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//通过工厂得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
return sqlSession;
}
//根据id查询用户的信息,得到一条记录的结果
@Test
public void findUserById() throws IOException {
SqlSession sqlSession = getSession(); //调用上面的方法获取sqlSession
//通过SqlSession操作数据库
//第一个参数:映射文件中statement的id,= namespace + statement的id
//第二个参数:指定和映射文件中所匹配的parameterType类型的参数
//selectOne表示查询出一条记录进行映射
User user = sqlSession.selectOne("test.findUserById", 1);
System.out.println(user);
//释放资源,最好放在finally中,这里只是测试程序,就不弄了
sqlSession.close();
}
//根据用户名称模糊查询用户列表
@Test
public void findUserByName() throws IOException {
SqlSession sqlSession = getSession();
//selectList表示查询出一个列表(多条记录)进行映射
List<User> list = sqlSession.selectList("test.findUserByName", "张三");
System.out.println(list);
//释放资源,最好放在finally中,这里只是测试程序,就不弄了
sqlSession.close();
}
//添加用户信息
@Test
public void insertUser() throws IOException {
SqlSession sqlSession = getSession();
User user = new User("倪升武", new Date(1995,07,02), "男", "同济大学");
sqlSession.insert("test.insertUser", user); //添加一项
//提交事务
sqlSession.commit();
System.out.println(user.getId()); //获取刚刚添加的id
//释放资源,最好放在finally中,这里只是测试程序,就不弄了
sqlSession.close();
}
//删除用户信息
@Test
public void deleteUser() throws IOException {
SqlSession sqlSession = getSession();
//传入id,删除用户
sqlSession.delete("test.deleteUser", 3);
//提交事务
sqlSession.commit();
//释放资源,最好放在finally中,这里只是测试程序,就不弄了
sqlSession.close();
}
//更新用户信息
@Test
public void updateUser() throws IOException {
SqlSession sqlSession = getSession();
User user = new User("倪升武", new Date(0,0,0), "男", "同济大学");
user.setId(2);
//更新用户
sqlSession.update("test.updateUser", user);
//提交事务
sqlSession.commit();
//释放资源,最好放在finally中,这里只是测试程序,就不弄了
sqlSession.close();
}
}测试后全部成功。
参照上述代码,完成对数据库内的业务表进行增删查改。
然后学习了spring,看了一天的教程,还是有点云里雾里,未写项目代码,知识点总结如下:
对于mybatis,使用了DAO和mapper方法;
如果mapper方法返回单个pojo对象(非集合对象),代理对象内部通过selectOne来查询数据库;
如果mapper方法返回一个非集合对象,代理对象内部通过selectList来查询数据库。
Junit测试知识点:
Junit4进行单元测试
导入junit4包
编写测试代码
要为测试的类建一个对象才能开始测试
标注
@Before
在任何一个测试执行前都要执行的代码
@Test
测试代码
@After
任何一个测试结束后都要执行的代码
@Ignore
忽略的,常用于标注未完成的测试用例(方法还未实现,但测试用例已经写好)
@BeforeClass
测试用例初始化时执行,只执行一次
@AfterClass
测试用例结束后执行,一次
限时测试
@Test(timeout=1000)
timeout用来规定时间,1000为毫秒,超过即为超时,会报错,系统强制终止程序
Runner运行器
用来执行测试代码
指定Runner用@RunnerWith修饰类(不是修饰函数)可用于参数化设置(用到再跟进学习)
打包测试
用到再跟进学习
spring知识点:
spring框架是一个分层架构,有7个模块构成
spring AOP
spring Core
spring DAO
spring ORM
Spring Context
spring Web
spring Web MVC
spring是J2EE应用程序框架,是轻量级的IoC和AOP的容器框架,主要是针对javaBean的生命周期进行管理的轻量级容器,可以单独使用,也可以和Struts框架,ibatis框架等组合使用。
其中,IoC(控制反转:Inverse of Control)是Spring容器的内核,IoC有助于应用对象之间的解耦;DI(依赖注入:Dependency Injection)的概念用以代替IoC,即让调用类对某一接口实现类的依赖关系由第三方(容器或协作类)注入,以移除调用类对某一接口实现类的依赖。
从注入方法上看,主要可以划分为三种类型:构造函数注入、属性注入和接口注入。Spring支持构造函数注入和属性注入。属性注入可以有选择地通过Setter方法完成调用类所需依赖的注入,更加灵活方便。
AOP(Aspect-oriented programming)就是面向切面编程,没看懂相关内容。
JavaBean知识点:
JavaBean是一个可重复使用的软件组件。实际上JavaBean是一种Java类,通过封装属性和方法成为具有某种功能或者处理某个业务的对象,简称bean。由于javabean是基于java语言的,因此javabean不依赖平台,具有以下特点:
1. 可以实现代码的重复利用
2. 易编写、易维护、易使用
3. 可以在任何安装了Java运行环境的平台上的使用,而不需要重新编译。
编写javabean就是编写一个java的类,所以你只要会写类就能编写一个bean,这个类创建的一个对象称做一个bean。为了能让使用这个bean的应用程序构建工具(比如JSP引擎)知道这个bean的属性和方法,只需在类的方法命名上遵守以下规则:
1. 如果类的成员变量的名字是xxx,那么为了更改或获取成员变量的值,即更改或获取属性,在类中可以使用两个方法:
getXxx(),用来获取属性xxx。
setXxx(),用来修改属性xxx.。
2. 对于boolean类型的成员变量,即布尔逻辑类型的属性,允许使用"is"代替上面的"get"和"set"。
3. 类中访问属性的方法都必须是public的,一般属性是private的。
url知识点:统一资源定位符(Uniform Resource Locator,缩写为URL),又叫做网页地址,是互联网上标准的资源的地址(Address)。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
JDBCTemplate:
JdbcTemplate是对JDBC的一种封装,抽象我们常用的一些方法。
JdbcTemplate的使用需要有DataSource的支持,所以在配置文件中,我们首先要配置一个OracleDataSource,然后在将这个DataSource配置到JdbcTemplate里。接着将JdbcTemplate配置进DAO层,最后将DAO配置进Model层。
暂时看到这些,打算继续实现用JDBCTemplate实现增删查改(之前用的JDBC),还未开始写代码,只看了些教程。
明天计划:写出spring项目代码并成功运行;写出JDBCTemplate实现增删查改代码并成功运行;有剩余时间补习一下java的基础语法什么的。
问题:mybatis实现增删查改;根据教程已完成。
spring知识点,配置,项目等;还是理解不能,需要时间消化。
JDBCTemplate实现增删查改;已看教程,代码还未实现。
收获:用Mybatis实现增删查改;了解sqlsession,sqlsessionfactory;学习了一堆乱七八糟的知识点(暂时都还没用)。
评论