发表于: 2017-05-07 22:13:16

0 3484


今日目标:对任务1进行收尾,完成除了将数据库部署到远程服务器之外的步骤(条件有限)


1.添加Mybatis,并且实现使用xml方法和注解方法。

2.将DAO修改为添加数据返回ID,删除或更新数据返回True/False。

3.添加c3p0数据库连接池。


//前几天断网没更新日志……


步骤1:

1.在src/main/java录下建立mybatis-config.xml,规定xml格式并且加入Mybatis规定的DTD。

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">

2.根据DTD的指导(一路alt+/),写好需要的内容。指定mapper配置文件的目录。

一开始这里的驱动包没有大写,而且包名还拼错,导致了java.lang.ClassNotFoundException: Cannot find class: com.jdbc.mysql.driver错误。

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6.    <typeAliases>
  7.    <package name="com.qhs.DB_crud.bean"/>
  8.    </typeAliases>
  9.    <environments default="development">
  10.        <environment id="development">
  11.        <transactionManager type="JDBC"/>
  12.        <dataSource type="POOLED">
  13.        <property name="driver" value="com.mysql.jdbc.Driver"/>
  14.        <property name="url" value="jdbc:mysql://localhost:3306/学员报名?characterEncoding=UTF-8"/>
  15.        <property name="username" value="root"/>
  16.        <property name="password" value="admin"/>
  17.        </dataSource>
  18.        </environment>
  19.    </environments>
  20.    <mappers>
  21.        <mapper resource="com/qhs/DB_crud/bean/student.xml"/>
  22.    </mappers>
  23. </configuration>

3.新建com/qhs/DB_crud/bean/student.xml,写好DTD

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper
  3.    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4.    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

4.以及指向signup表,以及指向student的配置

  1.        <mapper namespace="com.qhs.DB_crud.bean">
  2.        <select id="listStudent" resultType="Student">
  3.            select * from signup      
  4.        </select>
  5.        </mapper>

5.最后编写一个测试类,测试Mybatis的配置。

在编写测试类的时候遇到问题:之前使用jUnit的时候,编写的方法有布尔类返回值,所以当时不求甚解的调用了assertTrue()方法。

之前找到的教程导包和语法不太一样,直接搜索导包语句,找到一篇比较浅显的:http://zhangjunhd.blog.51cto.com/113473/132553/

对测试方法进行修改:

当抛出异常的时候

  1. public void testApp()
  2.    {
  3.          try {
  4.              new Main().query();  
  5.          } catch (IOException e) {
  6.        }
  7.    }

题外话:我尝试关闭Mysql服务,让程序产生异常,执行net stop MySQL的时候报了没有权限的错误。

懒得用Win+x开启管理员下的cmd,搜索了一下,Windows 下的CMD有runas命令,作用类似Linux下的sudo:

  1. C:\Users\QHS>runas /user:Administrator "cmd net stop Mysql"
  2. 输入 Administrator 的密码:
  3. 试图将 cmd net stop Mysql 作为用户 "QHS-PC\Administrator" 启动...
  4. RUNAS 错误: 无法运行 - cmd net stop Mysql
  5. 1327: 用户帐户限制阻止了此用户进行登录。例如:不允许使用空密码,登录次数的限制,
  6. 或强制实施的某个策略限制。

不知道Windows怎么做到在同一个QHS用户下设置正常权限和管理员权限的……

main类中的query方法:

  1.    public void query() throws IOException {
  2.        String resource = "mybatis-config.xml";
  3.        InputStream inputStream = Resources.getResourceAsStream(resource);
  4.        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  5.        SqlSession session = sqlSessionFactory.openSession();
  6.        listAll(session);
  7.        session.commit();
  8.        session.close();
  9.    }
  10.    private static void listAll(SqlSession session) {
  11.        List<Student> ss = session.selectList("listStudent");
  12.        for (Student s : ss) {
  13.            System.out.println(s.getName());
  14.        }
  15.    }

6.将配置方式改为注解。

新建包com.qhs.DB_crud.mapper以及接口StudentMapper。

并且将sql语句以及具体的操作写成注释。

  1. package com.qhs.DB_crud.mapper;
  2. import java.util.List;
  3. import org.apache.ibatis.annotations.Select;
  4. import com.qhs.DB_crud.bean.Student;
  5. public interface StudentMapper {
  6.    @Select("select * from signup")
  7.    public List<Student> list();  
  8. }

在mybatis-config.xml中,添加一个mapper:

  1. <mapper class="com.qhs.DB_crud.mapper.StudentMapper"/>

在主方法中,获取一个mapper:

  1.    public static void main(String[] args) throws IOException {
  2.        String resource = "mybatis-config.xml";
  3.        InputStream inputStream = Resources.getResourceAsStream(resource);
  4.        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  5.        SqlSession session = sqlSessionFactory.openSession();
  6.        StudentMapper mapper = session.getMapper(StudentMapper.class);
  7.        //listAll(session);
  8.         //getStudent(mapper);
  9.        session.commit();
  10.        session.close();
  11.    }

至此步骤1全部完成。


步骤2:对DAO进行修改。

1.在接口中修改add方法的返回值。(update.delete方法已经写成返回boolean)

  1. public int add(Student student);

2.修改StudentDAO类中的具体实现:

  1. if(rs.next()){
  2.                //此时rs如果不为空,则只含有自增id
  3.                int i = rs.getInt(1);
  4.                return i;
  5.            }

步骤3:添加c3p0数据库连接池。

1.在Maven中添加c3p0。

  1.    <dependency>
  2.          <groupId>com.mchange</groupId>
  3.          <artifactId>c3p0</artifactId>
  4.          <version>0.9.5.2</version>
  5.    </dependency>

2.在mybatis-config.xml中将数据源改为c3p0

  1. <dataSource type="org.mybatis.c3p0.C3P0DataSourceFactory">

2.一开始以为只需要改数据源。。然后发现整个dataSource都要改……

  1.        <dataSource type="org.mybatis.c3p0.C3P0DataSourceFactory">
  2.            <property name="driverClass" value="com.mysql.jdbc.Driver" />    
  3.            <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/学员报名?useUnicode=true&amp;characterEncoding=UTF-8&amp;autoReconnect=true&amp;failOverReadOnly=false"/>    
  4.            <property name="user" value="root" />    
  5.            <property name="password" value="admin" />
  6.            <!-- 连接池初始化大小为3 -->
  7.            <property name="initialPoolSize" value="3"/>
  8.            <!-- 连接池最大为10 -->
  9.            <property name="maxPoolSize" value="10"/>
  10.            <!-- 连接池最小为3 -->
  11.            <property name="minPoolSize" value="3"/>
  12.            <!-- 连接池在无空闲连接可用时一次性最多创建的新数据库连接数  -->
  13.            <property name="acquireIncrement" value="5"/>
  14.            <!-- 连接的最大空闲时间,如果超过这个时间(秒),某个数据库连接还没有被使用,则会断开掉这个连接。如果为0,则永远不会断开连接,即回收此连接 -->
  15.            <property name="maxIdleTime" value="30"/>
  16.            <!-- 最大的Statement数量 -->
  17.            <property name="maxStatements" value="500"/>
  18.            <!-- 每个连接启动的最大Statement数量 -->
  19.            <property name="maxStatementsPerConnection" value="50"/>
  20.            <!-- 同时运行的线程数 -->
  21.            <property name="numHelperThreads" value="5"/>
  22.        </dataSource>

番外:参考http://blog.csdn.net/csu_max/article/details/40555819,对Eclipse和Github进行了连接。

明日目标:学习SpringMVC,并且尝试任务2

收获:熟悉了Mybatis的xml、注解方式配置,熟悉了对Mybatis和c3p0的整合,将IDE和代码仓库关联。


返回列表 返回列表
评论

    分享到