创建Maven项目:添加依赖!依赖可以到maven repository官网那个里面去寻找所需要的依赖。
首先探讨下传统的JDBC连接数据库。
1.开发JDBCUTILS(JDBC工具类,就是为了省去重复的代码,获取Connection,Statament,ResultSet)
String user="root";
String url="jdbc:mysql:///dbGirl";
String password="1234";
String driverClass="com.mysql.jdbc.Driver";
这些配合文件我们不应该写在具体的代码中去,因为这样很繁琐!修改难度大。
InputStream inputStream=jdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");
通过类加载可以读取配置文件中的内容。然后通过Properties来获取具体的属性。
Class.forName(driverClass);
Connection connection=DriverManager.getConnection(url, user, password);
return connection;这样可以获取连接!
如何进行单元测试呢?我们在测试类中构造调用被测试的方法,通过assert这个类可以判断我们的方法返回值是否与我们的预期相同或者不同,
Assert.assertNotNull(connection);
List<Student>list=new List();
Student student=null;
String sql="select * from student";
PreparedStatement preparedStatement=null;
Connection connection=null;
ResultSet resultSet=null;
try {
resultSet=preparedStatement.executeQuery();
connection=jdbcUtils.getConnection();
preparedStatement =connection.prepareStatement(sql);
while(resultSet.next())
{
int id=resultSet.getInt("id");
String name=resultSet.getString("name");
student =new Student();
student.set(***);
student.set(***);
students.add();
}
} catch (SQLException e) {
e.printStackTrace();
}
2 使用spring jdbcTemplate访问数据库
1.添加sping jdbc依赖包!
2.添加spring -content上下文依赖包
编写beans.xml文件。
添加dataSource实体类,<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql:///springdata"></property>
<property name="username" value="root"></property>
<property name="password" value="1234"></property>
</bean>
添加jdbcTemplate实体类,
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
获取上下文,通过类加载器获取
cxt= new ClassPathXmlApplicationContext("beans.xml");
将jdbcTemplate注入到dao中,通过dao管理,既可以进行对数据库访问。
使用spring-data-jpa连接数据库
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.8.0.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3.6.Final</version>
</dependency>
第一步,添加依赖。
第二步,添加datasource,以及entitymanagerFactory.
<bean id="dataSource" class="org.springframework.jdbc.datasource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql:///dbgirl"></property>
<property name="userwork" value="root"></property>
<property name="passwork" value="1234"></property>
</bean>
第三步,创建实体类管理器(entityMnagerFactory),该类的属性应该包括数据源和jpa适配,以及包的扫描路径,以及jpa相关配置。<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataource"></property>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jp.vendor.HibernateJpaVendorAdapter">
</bean>
</property>
<property name="packgesToScan" value="com.earl.*"></property>
<property name="jpaProperties">
<props>
<prop key="hibernate.ejb.naming_strtegy">org.hibernate.cfg.ImprovedNmin</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDilect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">updae</prop>
</props>
</property>
第四步,配置事物管理器
<bean id="transactionManager" class="org.springframework.orm.jpa.Jpa">
<property name="entityManagerFactory" ref="entityManagerFactory"
</bean>
第五步 配置支持注解的事物
<tx:annotation-driven transaction-manager="transactionManager"/>
第六步 配置springdata
<jpa:repositories base-package="com.earl.repository" entity-manager-factory-ref="
entityManagerFactory">
<context:component-scan base-package="com.earl">
Repository类的定义
public interface Repository<T,ID extends Serializable>
{
}
1.Repository是一个空接口,标记接口,没有包含任何方法声明的接口。
2.如果我们定义的接口EmployeeRepository extends Repository,
如果我们定义的接口没有extends Reporitory运行的时候就会报找不到可以用的Bean
3.我们可以添加注解达到不用extends Repository的功能
@RepositoryDefinition(domainClass=Employee.class,idClass=Integer.class)
事物必须放在 Service层中,
PagingAndSortingRespository使用
1.该接口包含分页和排序的功能
2.带排序的查询 findAll(Sort sort)
3.带排序的分页查询fubdAll( Pageable pageable)
JpaSpectificationExecutorRepository接口详解:
Specification封装了Jpa Criteria查询条件: