发表于: 2017-09-17 17:39:49
3 733
今天完成的任务
关于任务一的总结
1.mysqls&navicat
mysql是数据库的一种,navicat是通过可视化的界面管理mysql的工具
配置好mysql后可以在cmd中通过
net start mysql #启动mysql服务 net stop mysql #关闭mysql服务
mysql可以通过相应的sql语句进行操作,这些sql语句也是以后使用mybatis时候调用数据库的语句
INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN );添加
SELECT column_name,column_name FROM table_name查询
索引:索引是对数据库性能的提高,加快了对数据库查询等操作的查询速度,减少了系统相应的时间
索引分为聚焦索引和非聚焦索引
聚焦索引本质是对数据库的根据索引的重新排序
非聚焦索引可以看成一个含有聚焦索引的表,包含指向实际表的指针
虽然因为各种原因我没有体验到用索引查询的便利之处,但是我仔细思考一下就知道,肯定是非常方便的东西...
2.JDK&JRE
JRE是Java Runtime Environment的缩写,是Java程序的运行环境。包含JVMjava虚拟机
JDK是Java Development Kit的缩写,是Java的开发工具包,主要包含了各种类库和工具
3.Maven
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。
但是我一般只用在idea中建立maven项目,通过pom.xml添加相关的jar依赖。
4.spring
1.基础
对spring框架来说,总是必须一个映射的类
public class Category {
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;
}
private int id;
private String name;
}
...其实我觉得写一个项目,先写这个准没错..
通过xml文件映射
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-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/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<bean name="c" class="com.how2java.pojo.Category">
<property name="name" value="category 1" />
</bean>
</beans>
通过里面的bean保存实体
2.注入
在上面建立的Category类的前提下,新建profuct类
public class Product {
private int id;
private String name;
@Autowired//这个地方加表情,或者getCateory的地方加标签
//@Resource(name="c")//这样也可以哦
private Category category;
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 Category getCategory() {
return category;
}
public void setCategory(Category category) {
this.category = category;
}
}
修改xml为
<bean name="c" class="com.how2java.pojo.Category">
<property name="name" value=" 1" />
</bean>
<bean name="p" class="com.how2java.pojo.Product"> <!-- 配置bean,配置后该类由spring管理 -->
<property name="name" value="product1" /><!-- 给Product里面的name属性赋值 -->
<!-- <property name="category" ref="c" /> --><!-- -->
<!-- 在com.how2java.pojo.Product这个类中有个名为 category 的属性,
它的类型是com.how2java.pojo.category, 在spring初始化的时候把 c注入到category类中 -->
</bean>
这样获得的product中就存在一个category对象,可以调用它
5.mybatis
首先还是创建一个category的类,所以写框架先写这个其实没差
public class Category {
private int id;
private String name;
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;
}
}
在mybatis中,通过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>
<package name="com.how2java.pojo"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/how2java?characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/how2java/pojo/Category.xml"/>
</mappers>
</configuration>
上面的样本是通过jdbc连接的,如果通过连接池连接,只需要置换这里的内容就可以了...
<c3p0-config>
<!-- This is default config! -->
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/how2java?characterEncoding=UTF-8</property>
<property name="user">root</property>
<property name="password">123456</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" />
<!--因性能消耗大请只在需要的时候使用它。-->
<property name="testConnectionOnCheckout" value="false" />
</default-config>
<!-- This is my config for mysql-->
</c3p0-config>
置换为连接池...
<?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,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的 -->
<mapper namespace="com.how2java.pojo">
<!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复
使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型
resultType就表示将查询结果封装成一个Category类的对象返回
Category类就是Category表所对应的实体类
-->
<select id="listCategory" resultType="Category">
select * from category_
<!--
13 根据id查询得到一个user对象
14 -->
</select>
</mapper>
写一个调用sql语句的xml文件,这里也可以使用标签和接口调用相应的sql语句,在main方法里通过spring框架实现相应的方法即可做到相同的效果,我会在下面详细说的..
6.mybatis&spring&单元测试
首先还是一如既往的category...在这里值得注意的一点是重写了toString方法
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+"]";
}
}
定义方法的接口,这里用标签的方式把sql语句与方法联系到了一起,只要实现这个方法就会调用相应的sql语句
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);
}
<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&characterEncoding=UTF-8&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>
与mybatis类似,也是通过xml文件联系数据库,这里使用的c3p0连接池,如果想使用其它的方式,在这里更改就可以了..
@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)
证明是在spring里的单元测试
@ContextConfiguration("classpath:applicationContext.xml")
调用连接数据库的xml文件
@Autowired
private CategoryMapper categoryMapper;
对成员变量、方法和构造函数进行标注,来完成自动装配的工作
@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);
}
}
替代main方法
7.Debug
debug是一个很常见的查询找bug的手段
通过点击上面甲虫一样的标志,程序会在你标注红点的地方停下,直到你运行下一步
明天要做的事
接着整github
遇到的问题
22端口失效
收获
评论