发表于: 2017-08-19 22:42:24

1 1167


今天完成的事情:重写了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   index   out   of   range   (1   >   number   of   parameters,   which   is   0).

      主要就是问号的问题 没有相应的问号与之匹配 或者加了单引号 这里不用加

       还有莫名其妙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>


        


返回列表 返回列表
评论

    分享到