1.安装mysql
下载地址为http://dev.mysql.com/downloads/mysql/,选择dmg类型的直接下载,跳转的页面要求注册或登录,可以直接点击页面最下面的
No thanks, just start my download.
下载,安装
安装结束会提示默认密码:
2016-01-26T03:15:17.366026Z 1 [Note] A temporary password is generated for root@localhost: o)pa_.adT2wZ
If you lose this password, please consult the section How to Reset the Root Password in the MySQL reference manual.
安装之后在系统偏好设置最下面可以看到mysql图标。
2.修改密码,创建表格
安装之后在mac的终端中输入mysql会提示找不到命令,因为系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下就找不到命令,mysql默认安装在/usr/local/mysql/bin/mysql,需要建立一个链路指向这里,在终端中执行命令 $sudo ln -s /usr/local/mysql/bin/mysql /usr/bin
设置之后通过mysql --version可以查看mysql版本号,注意version前面是两个横线
mysql -u root -p回车,再输入密码回车即可进入mysql
首先需要修改密码,否则无法进行进一步操作
设置方式是SET PASSWORD = PASSWORD('your new password'); 关于修改密码问题可以参考这里
密码修改之后就可以执行sql语句,例如select version(),current_date;会返回下面的结果:
version()current_date
5.7.10
2016-01-26
show databases 显示已经创建的数据库,通过create database mydb; 创建名为“mydb”的数据库,使用drop database mydb;删除名为“mydb”的数据库,使用use mydb 选择使用“mydb”数据库,选中一个数据库之后可以创建表格。
mysql中创建表格时通过character set = utf8;使表格支持中文。
create table user ( id int auto_increment, userName varchar(50), userAge int,userAddress varchar(200), primary key (id) ) character set = utf8;
3.使用MyBatis对mysql进行增删改查
创建maven项目,这个项目使用mybatis对mysql中user表进行增删改查操作,User是和表格对应的JavaBean.
package mybatis.demo;
/**
* Created by code on 16/1/27.
*/
public class User {
public int id;
public String userName;
public int userAge;
public String userAddress;
public User (){
super();
}
public User(int id, String userName, int userAge, String userAddress) {
this.id = id;
this.userName = userName;
this.userAge = userAge;
this.userAddress = userAddress;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getUserAge() {
return userAge;
}
public void setUserAge(int userAge) {
this.userAge = userAge;
}
public String getUserAddress() {
return userAddress;
}
public void setUserAddress(String userAddress) {
this.userAddress = userAddress;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
",\tuserName='" + userName + '\'' +
",\tuserAge=" + userAge +
",\tuserAddress='" + userAddress + '\'' +
'}';
}
}
项目目录结构如下图,pom.xml添加mysql和mybatis的依赖,并添加拷贝xml配置文件到target目录下的相关配置
pom.xml代码如下
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
java.test
mybatis_demo
1.0-SNAPSHOT
org.mybatis
mybatis
3.1.1
mysql
mysql-connector-java
5.1.38
src/main/java
**/*.xml
true
使用mybatis主要要配置两类xml文件,一个是用于连接数据库和xml映射文件的,这里就是db_conf.xml,注意要修改连接数据库的password。
/p>
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
这个文件的environment部门配置了连接数据库所需的信息,mappers部分配置了一个xml映射文件,即mybatis.demo包下面的UserMapper.xml,这个配置文件包含了对数据库增删改查相关的sql映射语句,其中mapper标签中的namespace需要写这个xml文件所在包名和文件名,但不包括后缀。代码中会使用每个增删改查子标签的id来使用对应的sql语句。
/p>
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
insert into user(id,userName,userAge,userAddress)
values(#{id},#{userName},#{userAge},#{userAddress})
insert into user(userName,userAge,userAddress) values(#{userName},#{userAge},#{userAddress})
select * from user where id = #{id}
select userName as userName from user where id = #{id}
select count(*) from user
delete from user where id=#{id}
update user set userName=#{userName} where id=#{id}
和UserMapper.xml对应的文件是UserMapper.java,这是一个接口类,里面定义了若干方法,每个方法的方法名和UserMapper.xml中每条增删改查子标签的id相同。
package mybatis.demo;
/**
* Created by code on 16/1/27.
*/
public interface UserMapper {
public User selectUserById(int id);
public void insertUser(User user);
public void insertUserWithoutId(User user);
public int getCount();
public void setUser(User user);
}
为了使用mybatis,写了一个工厂类ConnectionFactory.java,可以方便的得到sqlSession,这个文件需要读取db_conf.xml,运行的时候ConnectionFactory是在target目录下,所以需要将db_conf.xml拷贝到target目录下,拷贝工作是通过pom.xml中build部分的代码自动完成的。
package mybatis.demo;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.Reader;
/**
* Created by code on 16/1/27.
*/
public class ConnectionFactory {
private static SqlSessionFactory factory;
static {
try {
Reader reader = Resources.getResourceAsReader("db_conf.xml");
factory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSessionFactory getSqlSessionFactory(){
return factory;
}
}
UserManager.java写了具体的数据库增删改查静态方法,类中的方法名可以随便取,但是为了和映射文件对应,这个类中的方法名和映射文件中的id及方法名一致,但是UserManager.java和UserMapper.java之间没有实现关系。
package mybatis.demo;
import org.apache.ibatis.session.SqlSession;
/**
* Created by code on 16/1/27.
*/
public class UserManager {
public static User selectUserById(int id){
SqlSession sqlSession = ConnectionFactory.getSqlSessionFactory().openSession();
try{
UserMapper user = sqlSession.getMapper(UserMapper.class);
return user.selectUserById(id);
}
finally {
sqlSession.close();
}
}
public static void insertUserWithoutId(User u){
SqlSession sqlSession = ConnectionFactory.getSqlSessionFactory().openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
userMapper.insertUserWithoutId(u);
sqlSession.commit();
sqlSession.close();
}
public static void insertUser(User u){
SqlSession sqlSession = ConnectionFactory.getSqlSessionFactory().openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
userMapper.insertUser(u);
sqlSession.commit();//这里必须提交,否则运行提示已经插入,但是数据库中没有记录。
sqlSession.close();
}
public static int getCount(){
SqlSession sqlSession = ConnectionFactory.getSqlSessionFactory().openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
int n = userMapper.getCount();
sqlSession.commit();
sqlSession.close();
return n;
}
public static void setUser(User user){
SqlSession sqlSession = ConnectionFactory.getSqlSessionFactory().openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
userMapper.setUser(user);
sqlSession.commit();
sqlSession.close();
}
}
RunTest.java调用UserManager.java中的方法完成数据库的增删改查操作。
package mybatis.demo;
/**
* Created by code on 16/1/27.
*/
public class RunTest {
public static void main(String[] args) {
crud();
}
public static void crud() {
int id = 0;
//插入数据
User u = UserManager.selectUserById(id);
if (u == null) {
u = new User(id, "winter", 30, "jinan");
UserManager.insertUser(u);
System.out.println("新增用户为:" + u);
} else {
System.out.println("id="+id+"的用户已经存在 " + u);
}
int nameIndex = UserManager.getCount()+1;
u = new User(nameIndex,"mybatis"+nameIndex,28+nameIndex,"usa NO."+nameIndex);
UserManager.insertUserWithoutId(u);
u.setUserName("mybatis" + nameIndex + "_fixed");
UserManager.setUser(u);
//查询数据
User user = null;
int index = 0;
while(true){
user = UserManager.selectUserById(++index);
if (user != null) {
System.out.println(user.toString());
} else {
System.out.println("id = "+index+" 的查询结果为 " + null);
break;
}
}
}
}
运行RunTest即可看到数据库增删改查对应的输出,没运行一次会递增向数据库中增加一条记录。如果读取出错,即数据库中有多条记录,但是最后只能循环读取少数记录,需要坚持是否有记录id不连续的情况,如果记录不连续可以修改crud()方法中id的值插入对应id的值。