发表于: 2019-11-24 22:37:22

2 935


今天完成的事情:

什么是 MyBatis?

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

Mapper XML 文件

MyBatis 的真正强大在于它的映射语句,也是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 就是针对 SQL 构建的,并且比普通的方法做的更好。

SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序):

  • cache – 给定命名空间的缓存配置。
  • cache-ref – 其他命名空间缓存配置的引用。
  • resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象。
  • sql – 可被其他语句引用的可重用语句块。
  • insert – 映射插入语句
  • update – 映射更新语句
  • delete – 映射删除语句
  • select – 映射查询语句

如何配置mybatis
在maven里的pom文件里增加依赖(白色代码部分)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
        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">
   <modelVersion>4.0.0</modelVersion>

   <groupId>goodMaven</groupId>
   <artifactId>boMaven</artifactId>
   <version>1.0-SNAPSHOT</version>
<dependencies>
   <dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
       <version>6.0.6</version>
   </dependency>

   <dependency>
       <groupId>org.mybatis</groupId>
       <artifactId>mybatis</artifactId>
       <version>3.4.5</version>
   </dependency>


</dependencies>


</project>

1.添加依赖,在pom.xml中添加

<!--mybatis核心包-->
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.4.5</version>
</dependency>
<!--MySQL的JDBC驱动包-->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.6</version>
</dependency>

2. 添加Entity

public class UsersEntity {
  private Integer userid;

  private String username;

  public Integer getUserid() {
    return userid;
  }

  public void setUserid(Integer userid) {
    this.userid = userid;
  }

  public String getUsername() {
    return username;
  }

  public void setUsername(String username) {
    this.username = username == null ? null : username.trim();
  }

}

3. 添加dao层的interface UsersEntityMapper.java

public interface UsersEntityMapper {

  UsersEntity getUsersByPhoneNo(String phoneNo);

}

4. 添加mapper的xml UsersEntityMapper.xml

<?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="com.alphaomega.sunshine.dao.UsersEntityMapper">
  <select id="getUsersByPhoneNo" parameterType="String" resultType="com.alphaomega.sunshine.entity.UsersEntity">
    select * from users where phoneno = #{phoneNo}
  </select>
</mapper>

5. 添加mybatis的配置文件mybatis_config.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>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC" />
      <!-- 配置数据库连接信息 -->
      <dataSource type="POOLED">
        <!-- 1.加载数据库驱动 -->
        <property name="driver" value="com.mysql.jdbc.Driver" />
        <!-- 2.数据库连接地址 (&->&amp;)-->
        <property name="url" value="jdbc:mysql://127.0.0.1:3306/schema_name?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=true" />
        <!-- 数据库用户... -->
        <property name="username" value="root" />
        <!-- 数据库密码... -->
        <property name="password" value="xxxxxxx" />
      </dataSource>
    </environment>
  </environments>

  <mappers>
  <!-- 注册文件-->
    <mapper resource="com/alphaomega/sunshine/mappers/UsersEntityMapper.xml"/> 
    <mapper resource="com/alphaomega/sunshine/mappers/XxxxxxEntityMapper.xml"/>
  </mappers>

</configuration>

6. mybatis配置文件mybatis_config.xml和UsersEntityMapper.xml的位置

UsersEntityMapper.xml如果放在src/main/java里的话,则需要向pom添加路径,否则package时会报错:找不到xml文件,

原因是maven默认xml文件在src/main/resources里(不过后来发现,即使放在了默认里也不行)。

<build>

  <resources>
    <resource>
      <directory>src/main/java</directory>
      <includes>
        <include>**/*.xml</include>
      </includes>
    </resource>

  </resources>

</build>

向maven项目添加src/main/resources目录,并将mybatis_config.xml放在里面。(虽然可以通过另创建文件夹,然后use as source,但还是按照maven默认比较舒服)

添加的方式可以通过Project-Properties-Java Build Path-Source-Add Folder-选中文件夹后Create new folder...

同样,测试目录src/test/resources也通过这样执行。

问题来了,测试时没有任何问题,但是jar包不能,maven会把test目录的xml文件复制到target/test-class下,但是不会将main下的xml复制到target/class里,

除了那些mapper,因为已经指定了路径。因此还需要在pom的resources标签里指定,为了maven复制过去。

<build>

  <resources>
    <resource>
      <directory>src/main/java</directory>
      <includes>
        <include>**/*.xml</include>
      </includes>
    </resource>

    <resource>
      <directory>src/main/resources</directory>
      <includes>
        <include>**/*.xml</include>
      </includes>
    </resource>

  </resources>

</build>

7. 最后使用

String resouces = "mybatis_config.xml";
InputStream in = Resources.getResourceAsStream(resouces);
//读取配置文件的配置信息,利用SqlSessionFactoryBuilder创建sqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
//利用sqlSessionFactory打开与数据库的会话
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
  UsersEntityMapper ueMapper = sqlSession.getMapper(UsersEntityMapper.class);//通过sqlSession得到mapper
  String no = "13299999999";
  UsersEntity user = ueMapper.getUsersByPhoneNo(no);//调用mapper的方法
  //只读操作不需要sqlSession.commit()
  System.out.println("查询到用户...");
  System.out.println(user.getUsername());
} finally {
  sqlSession.close();
}

遇到的问题:(遇到什么困难,怎么解决的)

1 导入的时候,网络太慢了,后面得在添加,比如时间的上有时会乱码等问题,
2 配置文件的两种方法,直接修改文件的方法还是没有很熟练,之后在CSDN上找到一篇博客,直接复制的别人的配置得到解决。


收获:(通过今天的学习,学到了什么知识)

1 mybatis 的基本认知,它其实和jdbc是有点类似的,但又不一样

2 通过Mybatis实现数据库的链接以及通过实现代码实现,mysql的创建,增删查改。

3 对于mysql语法还是有些模糊了,得重新回顾。

select * from emp;  #注释

#---------------------------

#----命令行连接MySql---------

 

#启动mysql服务器

net start mysql

 

#关闭 

net stop mysql

  

#进入

mysql -h 主机地址 -u 用户名 -p 用户密码

 

#退出

exit

status;

显示当前mysql的version的各种信息。

 

#---------------------------

#----MySql用户管理---------

 

#修改密码:首先在DOS 下进入mysql安装路径的bin目录下,然后键入以下命令:

mysqladmin -uroot -p123 password 456;

 

#增加用户

#格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by '密码'

/*

如,增加一个用户user1密码为password1,让其可以在本机上登录, 并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入mysql,然后键入以下命令:

grant select,insert,update,delete on *.* to user1@localhost Identified by "password1";

如果希望该用户能够在任何机器上登陆mysql,则将localhost改为"%"。

如果你不想user1有密码,可以再打一个命令将密码去掉。

grant select,insert,update,delete on mydb.* to user1@localhost identified by "";

*/

 

grant all privileges on wpj1105.* to sunxiao@localhost identified by '123';   #all privileges 所有权限

 

#----------------------------

#-----MySql数据库操作基础-----

 

#显示数据库

show databases;

 

#判断是否存在数据库wpj1105,有的话先删除

drop database if exists wpj1105;

 

#创建数据库

create database wpj1105;

 

#删除数据库

drop database wpj1105;

 

#使用该数据库

use wpj1105;

 

#显示数据库中的表

show tables;

 

#先判断表是否存在,存在先删除

drop table if exists student;

 

#创建表

create table student(

id int auto_increment primary key,

name varchar(50),

sex varchar(20),

date varchar(50),

content varchar(100)

)default charset=utf8;

 

#删除表

drop table student;

 

#查看表的结构

describe student;  #可以简写为desc student;

 

#插入数据

insert into student values(null,'aa','男','1988-10-2','......');

insert into student values(null,'bb','女','1889-03-6','......');

insert into student values(null,'cc','男','1889-08-8','......');

insert into student values(null,'dd','女','1889-12-8','......');

insert into student values(null,'ee','女','1889-09-6','......');

insert into student values(null,'ff','null','1889-09-6','......');

#查询表中的数据

select * from student;

select id,name from student;

 

#修改某一条数据

update student set sex='男' where id=4;

 

#删除数据

delete from student where id=5;

 

# and 且

select * from student where date>'1988-1-2' and date<'1988-12-1';

 

# or 或

select * from student where date<'1988-11-2' or date>'1988-12-1';

  

#between

select * from student where date between '1988-1-2' and '1988-12-1';

 

#in 查询制定集合内的数据

select * from student where id in (1,3,5);

 

#排序 asc 升序  desc 降序

select * from student order by id asc;

 

#分组查询 #聚合函数

select max(id),name,sex from student group by sex;

 

select min(date) from student;

 

select avg(id) as '求平均' from student;

 

select count(*) from student;   #统计表中总数

 

select count(sex) from student;   #统计表中性别总数  若有一条数据中sex为空的话,就不予以统计~

 

select sum(id) from student;

 

#查询第i条以后到第j条的数据(不包括第i条)

select * from student limit 2,5;  #显示3-5条数据

 

#巩固练习

create table c(

 id int primary key auto_increment,

 name varchar(10) not null,

 sex varchar(50) ,  #DEFAULT '男' ,

 age int unsigned, #不能为负值(如为负值 则默认为0)

 sno int unique    #不可重复

);

 

drop table c;

desc c;

 

insert into c (id,name,sex,age,sno) values (null,'涛哥','男',68,1);

insert into c (id,name,sex,age,sno) values (null,'aa','男',68,2);

insert into c (id,name,sex,age,sno) values (null,'平平','男',35,3);

...

 

select * from c;

 

#修改数据

update c set age=66 where id=2;

update c set name='花花',age=21,sex='女' where id=2

delete from c where age=21;

 

#常用查询语句

select name,age ,id from c

select * from c where age>40 and age<60;  #and

select * from c where age<40 or age<60;  #or

select * from c where age between 40 and 60 #between

select * from c where age in (30,48,68,99);     #in 查询指定集合内的数据

select * from c order by age desc;      #order by (asc升序 des降序)

 

#分组查询

select name,max(age) from c group by sex;  #按性别分组查年龄最大值

#聚合函数

select min(age) from c;

select avg(age) as '平均年龄 ' from c;

select count(*) from c;  #统计表中数据总数

select sum(age) from c;

 

#修改表的名字

#格式:alter table tbl_name rename to new_name

alter table c rename to a;

  

#表结构修改

create table test

(

id int not null auto_increment primary key, #设定主键

name varchar(20) not null default 'NoName', #设定默认值

department_id int not null,

position_id int not null,

unique (department_id,position_id) #设定唯一值

);

 

#修改表的名字

#格式:alter table tbl_name rename to new_name

alter table test rename to test_rename;

 

#向表中增加一个字段(列)

#格式:alter table tablename add columnname type;/alter table tablename add(columnname type);

alter table test add  columnname varchar(20);

 

#修改表中某个字段的名字

alter table tablename change columnname newcolumnname type;  #修改一个表的字段名

alter table test change name uname varchar(50);

 

select * from test;

 

#表position 增加列test

alter table position add(test char(10));

#表position 修改列test

alter table position modify test char(20) not null;

#表position 修改列test 默认值

alter table position alter test set default 'system';

#表position 去掉test 默认值

alter table position alter test drop default;

#表position 去掉列test

alter table position drop column test;

#表depart_pos 删除主键

alter table depart_pos drop primary key;

#表depart_pos 增加主键

alter table depart_pos add primary key PK_depart_pos

(department_id,position_id);

 

#用文本方式将数据装入数据库表中(例如D:/mysql.txt)

load data local infile "D:/mysql.txt" into table MYTABLE;

 

#导入.sql文件命令(例如D:/mysql.sql)

source d:/mysql.sql;  #或者  /. d:/mysql.sql;






明天计划的事情:

1 mybatis 的官方文档再阅读一遍
2 mybatis的数据库连接再实现一次

3 开始学习搭建 spring + maven + mybatis的搭建
4 回头复习java基础知识,以及面向对象的后续的任务



 





返回列表 返回列表
评论

    分享到