1、最原始的连接数据库JDBC
JDBC是sun公司定义的JAVA用来访问数据库系统的技术. Java Data Base Connectivtity
常用的接口Connection Statement PreparedStatement CallableStatement ResultSet
2、PreparedStatement和Statement的区别是什么?
PreparedStatement是Statement的子类,是预编译SQL语句的,可以用?来标识SQL的参数,有效的防止SQL注入,而Statement只能执行静态的SQL.
3、什么叫做sql注入,如何防止
编程人员如果以拼凑的SQL语句附加参数容易引起SQL注入,防止的方式可以通过预执行编译SQL(PreparedStatement)和存储过程解决
public class ConnectDB {
public static Connection getConnection() {
Connection connection = null;
try {
Class.forName("com.mysql.jdbc.Driver");
//-----在url后面添加useUnicode=true&characterEncoding=UTF-8这些参数是为了让mysql数据库可以识别中文-----
String url = "jdbc:mysql://数据库ip地址/数据库名?useUnicode=true&characterEncoding=UTF-8";
String username = "root";
String password = "";
try {
connection = DriverManager.getConnection(url,username,password);
System.out.println("数据连接成功!");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return connection;
}
public static void main(String[] args) {
getConnection();
}
}
ORM是什么,如何实现数据库操作的,那些框架基于ORM思想的
1).ORM 对象关系映射
2).通过实体类和表之间的映射完成用面向对象的方式操作关系型数据库
实体类映射表
实体类属性映射列
实体类对象映射行
当我们完成对某个实体类的 ,框架会将我们的JAVA实体类的操作转换成SQL语句,具体转换通过映射配置来完成.
3).MYBATIS,HIBERNATE,JPA
Mybatis
1、MyBatis工作原理
MyBatis应用程序根据XML配置文件创建SqlSessionFactory,SqlSessionFactory在根据配置,配置来源于两个地方,一处是配置文件,一处是Java代码的注解,获取一个SqlSession。SqlSession包含了执行sql所需要的所有方法,可以通过SqlSession实例直接运行映射的sql语句,完成对数据的增删改查和事务提交等,用完之后关闭SqlSession。
2、MyBatis中#{...} 和 ${...}的区别
使用#{}格式的语法在mybatis中使用Preparement语句来安全的设置值,可以防止SQL注入
$将传入的数据直接显示生成在sql中,不能防止SQL注入
3、在mapper中如何传递多个参数
将Mapper中抽象方法的参数设置为HashMap 数据类型,在SQL语句中用#{key}取到对应的值
4、如何获取自动生成的(主)键值?
在<INSERT>中顶部添加
<selectKey resultType="java.lang.Short" order="AFTER" keyProperty="id">
SELECT LAST_INSERT_ID() AS id
</selectKey>
5、MyBatis注解用过的注解
1). @Select:查询数据
2). @UpDate:更新数据
3).@ResultMap("DetailMap")对应List<对象>——<resultMap id="DetailMap" type="com.org.Student" extends="ListMap">,@ResultType(Map.class)对应 List<Map<String,Object>>
4).@Param:参数 用法select * from user where name= #{name} @Param("name") String username,
Hibernate
1、Hibernate的工作原理是什么,如何加载配置
工作原理: 就是读取你的hql语句 然后根据数据库方言转变成sql语句然后使用jdbc执行转变后的数据库
加载配置:
1).通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件
2).由hibernate.cfg.xml中的<mapping resource="com/xx/User.hbm.xml"/>读取并解析映射信息
3).通过config.buildSessionFactory();//创建SessionFactory
2、Hiberante中get和load的区别
GET不会使用类级别延迟加载,LOAD会
3、Hibernate如何实现的延迟加载
延迟加载分类级别和关联级别
类级别是在映射文件<Class>节点上添加lazy属性
关联级别是在<set><many-to-one>上添加lazy属性
4、如何优化Hibernate的使用
通过设置inverse和cascade及优化HQL和缓存机制
5、Hibernate中的Session指的是什么? 可否将单个的Session在多个线程间进行共享?
Session接口对于Hibernate 开发人员来说是一个最重要的接口。然而在Hibernate中,实例化的Session是一个轻量级的类,创建和销毁它都不会占用很多资源。这在实际项目中确实很重要,因为在客户程序中,可能会不断地创建以及销毁Session对象,如果Session的开销太大,会给系统带来不良影响。但值得注意的是 Session对象是非线程安全的,因此在你的设计中,最好是一个线程只创建一个Session对象。
6、Hibernate中transient、persistent、detached对象三者之间有什么区别?
1). 在Hibernate中,对象具有三种状态:transient、persistent和detached。
2). 同Hibernate的session有关联的对象是persistent对象。对这种对象进行的所有修改都会按照事先设定的刷新策略,反映到数据库之中,也即,可以在对象的任何一个属性发生改变时自动刷新,也可以通过调用Session.flush()方法显式地进行刷新。
3). 如果一个对象原来同Session有关联关系,但当下却没有关联关系了,这样的对象就是detached的对象。 可以通过调用任意一个session的update()或者saveOrUpdate()方法,重新将该detached对象同相应的seesion建立关联关系。
4). Transient对象指的是新建的持久化类的实例,它还从未同Hibernate的任何Session有过关联关系。 可以调用persist()或者save()方法,将transient对象变成persistent对象。
注意:这里所说的transient指的不是 Java中的transient关键字。
7、Hibenate的查询方式
Session的load get
Query 的 uniqueResult list iterate
QBC
MyBatis和Hibernate的区别
Hibernate是全自动的ORM持久层框架,Mybatis是半自动的ORM持久层框架.
Hibernate的对象关系映射做的非常全面,SQL语句自动生成,而Mybatis的SQL语句需要编程人员自己写.