解压版MySQL安装5.7.13
1.配置环境变量
我的电脑->属性->高级->环境变量->path
如:C:\Program Files\MySQL\MySQL Server 5.6\bin
2.修改my-default.ini或者自己新建my.ini
在其中修改或添加配置:
[mysqld]
basedir=C:\Program Files\MySQL\MySQL Server 5.6
datadir=C:\Program Files\MySQL\MySQL Server 5.6\data
3.以管理员身份运行cmd一定要用管理员身份运行,不然权限不够
进入mysql的bin文件夹不管有没有配置过环境变量,也要进入bin文件夹,否则之后启动服务仍然会报错误2
输入mysqld -install(如果不用管理员身份运行,将会因为权限不够而出现错误:Install/Remove of the Service Denied!)
安装成功
4.运行mysqld –initialize(注意这里是两个减号,如出现服务无法启动,无系统错误则执行。若没有init则不存在data目录,自然无法启动成功)
5.安装成功后就要启动服务了,继续在cmd中输入:net start mysql,服务启动成功!
6、使用mysql -u root -p回车,输入密码。(当执行完第四步之后,在data目录下有一个.err结尾的文件内有这样一句话:A temporary password is generated for root@localhost: hAXP8)oNj,G.其中加粗部分为临时密码,没有这个密码无法登陆)。
7、登陆之后如果想进行其它操作,需要先修改密码。set password = password(‘1234’);1234为新的密码。
配置hibernate
1、创建数据库表。如:Test(id varchar(2),name varchar(10))。这里的表的两列都是普通属性,都不是主键。因此在hibernate的映射文件中就需要使用复合主键的方式。当然也可以建立一个主键,这不在本次配置讨论之列。
2、使用eclipse建立个工程,两个包com、exec。在com包内新建两个Java文件,分别取名User, UserID。
public class User {
private UserID id;
public void setId(UserID id) {
this.id = id;
}
public UserID getId() {
return this.id;
}
}
public class UserID implements Serializable {
private String id;
private String name;
此处为两个成员变量的get\set方法
public boolean equals(Object o) {
if(o == null)
return false;
if(!(o instanceof UserID))
return false;
UserID u = (UserID)o;
if((id.equals(u.getId()))&&(name.equals(u.getName())))
return true;
return false;
}
public int hashCode() {
return name.hashCode();
}
}
hibernate使用主键标识对象的唯一性。如果数据库中没有自行设置主键,那么使用复合主键。此时需要为复合主键单独设置一个类,即UserID,其中id+name作为主键。因此组合之后的UserID作为主键使用,作为User的属性,User与数据库表相互映射。如果数据库表中不只两列,比如还有sex列,但不作为复合主键。那么sex不需要出现在UserID内,只需要写在User内即可。但UserID类必须有而且作为User一个属性。
另外,UserID需要实现Serializable接口(目前我也不明白为什么)。而且需要重写equals、hashCode方法。当然此处给出的重写方法不一定准确。重写这两个方法可以在操作数据时提高正确性和效率。
3、写映射文件UserID.hbm.xml。
<hibernate-mapping>
<class name="com.User" table="Test">
<composite-id name="id" class="com.UserID">
<key-property name="id">
<column name="id" />
</key-property>
<key-property name="name">
<column name="name" />
</key-property>
</composite-id>
</class>
</hibernate-mapping>
这个文件与User.class放在同一个目录下。class的属性name指明映射对象,记得加上包名。table指向数据库中的表。composite-id的name指向User中的id属性,class指向复合主键的类UserID,记得包名。key-property的name指向UserID中的id属性,column的name指向数据库中的id列。从这里可以看出,数据库中的名字和Java类中的名字未必对应,只要在映射关系里指明即可。
4、编写配置文件hibernate.cfg.xml,放在存放编译文件的目录,即与User.class的包com同一目录。
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/ShuziYingxin</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">1234</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<mapping resource="com/User.hbm.xml" />
</session-factory>
</hibernate-configuration>
property属性一般为固定写法,除非把MySQL数据库换成其他数据库,或者改变密码用户名端口数据库。mapping的resource属性执行映射文件,使用相对路径。(xml文件没有遵守相关书写贵方,引以为戒)
6、导入jar包。将hibernate压缩包lib\required目录下所有jar包和MySQL驱动jar包添加到build path。可以将所有jar包放入一个文件夹中,复制到工程目录下,然后全选所有jar包右键add to build path即可。前提使用eclipse。
5、在exec包下新建文件Client.java。
//读取hibernate.cfg.xml文件
Configuration cfg = new Configuration().configure();
//建立SessionFactory
SessionFactory factory = cfg.buildSessionFactory();
//取得session
Session session = null;
try {
session = factory.openSession();
//开启事务
session.beginTransaction();
//查询数据
Query<UserBean> query = session.createQuery("from UserBean");
List<UserBean> list = query.list();
for (int i=0;i<list.size(); i++) {
UserBean user = list.get(i);
UserID uid = user.getId();
System.out.println(uid.getId() +" " + uid.getName());
}
//提交事务
session.getTransaction().commit();
} catch(Exception e) {
e.printStackTrace();
//回滚事务
session.getTransaction().rollback();
}finally {
if (session != null) {
if (session.isOpen()) {
//关闭session
session.close();
}
}
}
}
}
Query query = session.createQuery(“from User”);这句话尤为重要,尤其是括号内的值,User为与数据库表Test对应的映射对象,千万别写Test。然后运行即可实现取出所有Test的记录。
非web程序配置spring
1、使用eclipse新建工程,两个包com、exec。在com下新建两个Java文件Person.java和Gun.java。
public class Person {
public Person() {}
public void setGunn(Gun gun) {
this.gun = gun;
}
public void useGun() {
System.out.println(gun.fire());
}
private Gun gun;
}
public class Gun {
public String fire() {
return "开火";
}
}
Person类内可以没有参数为空的构造器,但是如果有参数不为空的构造器,则必须有参数为空的构造器。而且使用spring管理对象,Person的属性必须有set方法。
2、写配置文件test.xml,放在bin目录下。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
<bean id="person" class="com.Person">
<property name="gunn" ref="gun" />
</bean>
<bean id="gun" class="com.Gun" />
</beans>
不可以省略beans内的属性。其中bean的id为对象的唯一标识,class为对应的类。因为Person有一个Gun属性,因此ref的值必须与Gun对应的id一致。property的name对应Person中对应属性的set方法的名字。
3、在exec下新建Client.java文件。
public class Client {
public static void main(String[] args) {
// 创建spring容器,参数为配置文件名
ApplicationContext ctx = new ClassPathXmlApplicationContext("test.xml");
// 根据id获得对象
Person p = ctx.getBean("person",Person.class);
p.useGun();
}
}