发表于: 2017-08-19 22:42:24
1 1166
今天完成的事情:重写了jdbc的代码 先写测试 再写接口 最后写实现
犯了一些错误 主要是传入参数 传出参数 不理解导致的
实际上就是用get set方法 选对相关的类型
拿相对复杂的更新来说 想要根据id更改name
测试方法只有两个参数 id 和 name 实际传入一个User
new一个User用set方法传入id 和name 然后执行方法
接口里面更简单 就是一个方法 返回值可以void 或者布尔类型 传入user
实现类 先写 sql语句 然后toString方法 里面参数第一个就是 1,user.getId
1对应写的第一个问号 链接数据库是写了一个类
public class DBHelper {
static final String url = "jdbc:mysql://127.0.0.1/first_a";
static final String name = "com.mysql.jdbc.Driver";
static final String user = "root";
static final String password = "123123";
Connection conn = null;
public PreparedStatement pst = null;
public DBHelper(String sql) {
try {
Class.forName(name);//指定连接类型
conn = DriverManager.getConnection(url, user, password);//获取连接
pst = conn.prepareStatement(sql);//准备执行语句
} catch (Exception e) {
e.printStackTrace();
}
}
public void close() {
try {
this.conn.close();
this.pst.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
实现类就看一下更新的 其他都相似 主要看传入什么参数 传出什么 返回值
public void updateUser(User user) {
String sql;
DBHelper db1;
sql = "update user_first set name= ? where id=?";
db1 = new DBHelper(sql);//创建DBHelper对象
try {
db1.pst.setString(1, user.getName());
db1.pst.setInt(2, user.getId());
} catch (Exception e) {
e.printStackTrace();
}
try {
db1.pst.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
db1.close();
然后重写了mybatis 也是先写测试 这里不用写接口在写实现类 直接在接口里用注解写sql简单多了
这里的思想和jdbc一样
不同的是mybatis把数据源放在配置文件里 核心是工厂模式 构建工厂 工厂构建会话 这里是写了一个工具类
测试里面 就是得到接口的实现类对象mapper 这里是想要根据id 改username age 一共三个参数
还是传入user set方法传入三个参数 然后调用方法
@Test
public void testUpdate(){
SqlSession sqlSession = haha.getSqlSession(true);
//得到UserMapperI接口的实现类对象,UserMapperI接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来
UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);
User user = new User();
user.setId(3);
user.setUsername("孤傲苍狼_xdp");
user.setAge(26);
//执行修改操作
int retResult = mapper.update(user);
//使用SqlSession执行完SQL之后需要关闭SqlSession
sqlSession.close();
System.out.println(retResult);
}
实际上还可以设置自动提交
public static SqlSession getSqlSession(boolean isAutoCommit) {
return getSqlSessionFactory().openSession(isAutoCommit);
}
返回true就是自动提交了
明天计划的事情:再重写一下spring 提交svn
遇到的问题:数据类型溢出 主要就是int太小 要用long
数据库错误显示
Parameter
主要就是问号的问题 没有相应的问号与之匹配 或者加了单引号 这里不用加
还有莫名其妙navicat连接不到数据库 检查了一下 不知道怎么回事mysql服务没启动
mybatis 能够使用注解 但是sql语句不用 ? 用#{}
收获:这两天学习重心有点偏离 没有一个主线零零散散的 经过师兄的提醒 把重心重新放在Spring mybatis框架上来
熟悉框架的使用方法 比如mybatis 配置文件 写数据源 管理映射文件
构建工厂 工厂生产会话 理解了单例模式
练习框架的使用 对比一下上面的代码就知道 直接接口里用注解 实在是方便多了
//使用@Insert注解指明add方法要执行的SQL
@Insert("insert into user(username, age) values(#{username}, #{age})")
public int add(User user);
xml写映射 也很简单 思想是一样的 那这个查询整个表来说 不需要传入参数 传出来一个user 的集合
<select id="selectAllUser" resultType="User">
select * from user
</select>
评论