发表于: 2017-09-16 23:51:49

1 744


今天完成的任务


在spring-mybaits框架的基础上写了

关于查询、添加、按id查询三种调用数据库的方法


一.关于s-m框架


只需要

1.接口

public interface CategoryMapper {

@Insert("insert into student ( name,age) values (#{name},#{age})")
public int add(Category category);
   @Select("select * from   student")
public List<Category> list();
   @Select("  select * from   student where id= #{id}")
public List<Category>ListOfId(Category category);


}


接口中通过注解的方式调用sql语句,接口里每一个方法都不是必须实现的,但只要添加一个新的方法,就能实现新的功能


2.和数据库相对的映射类


public class Category {
private int id;
   private String name;
   private int age;
   public int getId() {
return id;
   }
public void setId(int id) {
this.id = id;
   }
public String getName() {
return name;
   }
public void setName(String name) {
this.name = name;
   }
public int getAge() {
return age;
   }
public void setAge(int age) {
this.age = age;
   }
@Override
   public String toString() {
return "Category [id=" + id + ", name=" + name + ",age="+age+"]";
   }



}

数据库中每增加的一个新的数据类型,在此类多添加一个对应的属性,并且多相应的get(set)方法就ok


3.构建框架的mxl接口


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
      xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
      xmlns:context="http://www.springframework.org/schema/context"
      xmlns:mvc="http://www.springframework.org/schema/mvc"
      xsi:schemaLocation="
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">

   <context:annotation-config />
   <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
       <property name="driverClass">
           <value>com.mysql.jdbc.Driver</value>
       </property>
       <property name="jdbcUrl">
           <value>jdbc:mysql://localhost:3306/how2java?useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC</value>
       </property>
       <property name="user">
           <value>root</value>
       </property>
       <property name="password">
           <value>123456</value>
       </property>


       <!--连接池中保留的最大连接数。 -->
       <property name="maxPoolSize" value="4" />
       <!--连接池中保留的最小连接数。-->
       <property name="minPoolSize" value="1" />
       <!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。-->
       <property name="initialPoolSize" value="10" />
       <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。 -->
       <property name="maxIdleTime" value="30" />
       <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。 -->
       <property name="acquireIncrement" value="5" />
       <!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。-->
       <property name="maxStatements" value="0" />
       <!--每60秒检查所有连接池中的空闲连接。 -->
       <property name="idleConnectionTestPeriod" value="60" />
       <!--定义在从数据库获取新连接失败后重复尝试的次数。-->
       <property name="acquireRetryAttempts" value="30" />
       <!--获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。-->
       <property name="breakAfterAcquireFailure" value="true" />
   </bean>
   <bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
       <property name="typeAliasesPackage" value="com.task.dao" />
       <property name="dataSource" ref="dataSource"/>
   </bean>
   <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
       <property name="basePackage" value="com.task.dao"/>
   </bean>



</beans>



这里是使用的c3p0连接池,

  <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
/bean>

只需要更改这里的内容,就能轻易地转换用什么方式连接数据库


4。实现类


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class MybatisTest {

@Autowired
   private CategoryMapper categoryMapper;

   @Test
   public void testList() {
try{
System.out.println(categoryMapper);
       List<Category> cs=categoryMapper.list();
       for (Category c : cs) {
System.out.println(c.getName());
       }
}catch (Exception e) {
System.out.print("出错了");
       }
}
@Test
   public void add(){
Category category = new Category();
for(long i=1;i<(long)200000000;i++){
int a= (int)(10*Math.random());
       category.setName("new Category");
       category.setAge(a);
       categoryMapper.add(category);

       }

}
@Test
   public void ListOfId(){
Category category = new Category();
       category.setId(2);
       List<Category> cs=categoryMapper.ListOfId(category);
       for (Category c : cs) {
System.out.println(c.getName());
       }
}
}

这里通过

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")

spring会自动帮你配置所有环境


你只需要实现接口里面的方法就ok,连接中断的时候,会自动报错并打印catch里面的输出语句...


也就是 无论数据库的表格有任何变化,需要实现什么方法,使用那种连接方式,在spring的框架里面,都可以通过简单的更改完成


关于插入2亿条数据然后通过索引和没有索引的方式感受功能

因为我电脑比较渣..虽然在上面的三个方法里分别的写的是  查询所有数据,插入2亿条数据并通过random()方法随机生成0-9的age。,通过输入的age来查询所有符合此age的数据


但是只要一插入的时间比较长电脑就自动死机...所以我只能根据现有推测证明:肯定是加入索引比较快



明天要做的任务

我可以在明天对任务一做总结之后深入spring的同时并开始任务二了吗..


遇到的问题

不给力的电脑


收获




       



返回列表 返回列表
评论

    分享到