MyBatis 详解(一对一,一对多,多对多)
1、什么是MyBatis?
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。
MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Ordinary Java Objects,普通的 Java对象)映射成数据库中的记录。
PS:本文所有代码下载链接:http://pan.baidu.com/s/1gf8CPQN 密码:t2x9
再给大家推荐一个比较好的mybatis学习网站:www.mybatis.cn
2、MyBatis 入门实例基于xml配置
①、创建MySQL数据库:mybatisDemo和表:person
create database mybatisDemo;
use mybatisDemo;
create table person(pid int primary key AUTO_INCREMENT, pname varchar(50), page int);
②、建立一个Java工程,并导入相应的jar包
相应的 jar 包下载链接:http://pan.baidu.com/s/1skZM09Z 密码:nkt6
③、在 MyBatisDemo 工程中添加数据库配置文件 mybatis-configuration.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>
<!-- 可以配置多个运行环境,但是每个 SqlSessionFactory 实例只能选择一个运行环境
一、development:开发模式
二、work:工作模式-->
<environments default="development">
<!--id属性必须和上面的default一样 -->
<environment id="development">
<!--事务管理器
一、JDBC:这个配置直接简单使用了 JDBC 的提交和回滚设置。它依赖于从数据源得到的连接来管理事务范围
二、MANAGED:这个配置几乎没做什么。它从来不提交或回滚一个连接。而它会让容器来管理事务的整个生命周期
比如 spring 或 JEE 应用服务器的上下文,默认情况下,它会关闭连接。然而一些容器并不希望这样,
因此如果你需要从连接中停止它,就可以将 closeConnection 属性设置为 false,比如:
<transactionManager type="MANAGED">
<property name="closeConnection" value="false"/>
</transactionManager>
-->
<transactionManager type="JDBC"/>
<!--dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象源 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatisdemo"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
</configuration>
④、定义表所对应的实体类
package com.ys.bean; public class Person {
private int pid;
private String pname;
private int page; public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
@Override
public String toString() {
return "Person [pid=" + pid + ", pname=" + pname + ", page=" + page
+ "]";
}
}
⑤、定义操作 person 表的sql映射文件personMapper.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.ys.bean.personMapper">
<!-- 根据 pid 查询 person 表中的数据
id:唯一标识符,此文件中的id值不能重复
resultType:返回值类型,一条数据库记录也就对应实体类的一个对象
parameterType:参数类型,也就是查询条件的类型
-->
<select id="selectPersonById"
resultType="com.ys.bean.Person" parameterType="int">
<!-- 这里和普通的sql 查询语句差不多,对于只有一个查询条件后面的 #{pid}表示占位符,里面不一定要写pid,写啥都可以,但是不要空着;如果有多个查询条件,则要写pojo类里面的属性 -->
select * from person where pid = #{pid}
</select> <!-- 查询person 表所有数据 -->
<select id="getAllPerson" resultType="com.ys.bean.Person">
select * from person
</select> <!-- 根据id更新数据 -->
<update id="updatePersonById" parameterType="com.ys.bean.Person">
update person set pname=#{pname},page=#{page} where pid = #{pid}
</update> <!-- 向 person 表插入一条数据 -->
<insert id="addPerson" parameterType="com.ys.bean.Person">
insert into person(pid,pname,page) values(#{pid},#{pname},#{page})
</insert> <!-- 根据 pid 删除数据 -->
<delete id="deletePersonById" parameterType="Long">
delete from person where pid=#{pid}
</delete> </mapper>
⑥、向 mybatis-configuration.xml 配置文件中注册 personMapper.xml 文件
<mappers>
<!-- 注册personMapper.xml文件,
personMapper.xml位于com.ys.bean这个包下,所以resource写成com/ys/bean/personMapper.xml-->
<mapper resource="com/ys/bean/personMapper.xml"/>
</mappers>
如下图所示:
⑦、创建测试类
package com.ys.test; import java.io.InputStream;
import java.util.List; import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test; import com.ys.bean.Person; public class MyBatisTest {
SqlSession session; @Before
public void beforeLoadXML(){
//加载 mybatis 配置文件
InputStream inputStream = MyBatisTest.class.
getClassLoader().getResourceAsStream("mybatis-configuration.xml");
//构建sqlSession的工厂
SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder().build(inputStream);
//根据 sqlSessionFactory 产生 session
session = sqlSessionFactory.openSession();
} //根据 pid 查询 person 表中的数据
@Test
public void testSelectById(){
//这个字符串有 personMapper.xml 文件中 两个部分构成
//<mapper namespace="com.ys.bean.personMapper"> 的 namespace 的值
//<select id="selectPersonById" > id 值
String statement = "com.ys.bean.personMapper"+".selectPersonById";
Person p = session.selectOne(statement, 1);
System.out.println(p);
session.close();
} //查询person 表所有数据
@Test
public void testGetAllPerson(){
String statement = "com.ys.bean.personMapper.getAllPerson";
List<Person> listPerson = session.selectList(statement);
System.out.println(listPerson);
session.close();
} //根据id更新数据
@Test
public void updateById(){
String statement = "com.ys.bean.personMapper.updatePersonById";
Person p = new Person();
p.setPid(1);
p.setPname("aaa");
p.setPage(11);
session.update(statement, p);
session.commit();
session.close();
} //向 person 表插入一条数据
@Test
public void addPerson(){
String statement = "com.ys.bean.personMapper.addPerson";
Person p = new Person();
//由于我们设置了主键的自增长机制,故这里不需要手动设置 pid 的值
//p.setPid(1);
p.setPname("add");
p.setPage(11);
session.insert(statement, p);
session.commit();
session.close();
} //根据 pid 删除person 表中的数据
@Test
public void deletePersonById(){
String statement = "com.ys.bean.personMapper.deletePersonById";
session.delete(statement, 1);
session.commit();
session.close(); } }
3、MyBatis 入门实例注解配置
①、上面的前面四步都是一样的,但是第五步不一样,我们不需要创建 personMapper.xml 文件,首先在 src 目录下创建 personMapper.java 文件
内容如下:
package com.ys.annocation; import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update; import com.ys.bean.Person; public interface PersonMapper { @Insert("insert into person(pid,pname,page) values(#{pid},#{pname},#{page})")
public int add(Person person); @Select("select * from person where pid = #{pid}")
public Person getPerson(int pid); @Update("update person set pname=#{pname},page=#{page} where pid = #{pid}")
public int updatePerson(Person preson); @Delete("delete from person where pid=#{pid}")
public int deletePerson(int pid); }
②、向 mybatis-configuration.xml 配置文件中注册 personMapper.xml 文件
③、编写测试类
@Test
public void testAnnocation(){
PersonMapper mapper = session.getMapper(PersonMapper.class);
Person p = new Person();
p.setPid(7);
p.setPname("abc");
p.setPage(11);
//调用增加方法
mapper.add(p);
//调用查询方法
Person p1 = mapper.getPerson(3);
System.out.println(p1);
//调用更新方法
p.setPage(100);
mapper.updatePerson(p);
//调用删除方法
mapper.deletePerson(7);
session.commit();
session.close();
}
4、MyBatis 入门实例 一对一 基于xml配置
这里我们以老师和班级为例,假设一般班级只能拥有有一个老师,一个老师只能带一个班级。
①、创建实体类
Teacher.java
package one.to.one; public class Teacher {
private int tid;
private String tname;
private Classes classes; public int getTid() {
return tid;
}
public void setTid(int tid) {
this.tid = tid;
}
public String getTname() {
return tname;
}
public void setTname(String tname) {
this.tname = tname;
}
public Classes getClasses() {
return classes;
}
public void setClasses(Classes classes) {
this.classes = classes;
}
@Override
public String toString() {
return "Teacher [tid=" + tid + ", tname=" + tname + ", classes=" + classes + "]";
} }
Classes.java
package one.to.one; public class Classes {
private int cid;
private String cname;
private Teacher teacher; public int getCid() {
return cid;
}
public void setCid(int cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
public Teacher getTeacher() {
return teacher;
}
public void setTeacher(Teacher teacher) {
this.teacher = teacher;
}
@Override
public String toString() {
return "Classes [cid=" + cid + ", cname=" + cname + ", teacher=" + teacher + "]";
} }
②、在数据库中根据实体类创建相应的数据表
③、定义操作 Classes 表的sql映射文件classesMapper.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="one.to.one.classesMapper">
<!--
方式一:嵌套结果:使用嵌套结果映射来处理重复的联合结果的子集
封装联表查询的数据(去除重复的数据)
select * from classes c, teacher t where c.tid=t.tid and c.tid=#{tid}
-->
<select id="getClasses" resultMap="getClassesMap" parameterType="int">
select * from classes c ,teacher t
where c.tid=t.tid and c.tid=#{tid}
</select>
<resultMap type="one.to.one.Classes" id="getClassesMap">
<id column="cid" property="cid"/>
<result column="cname" property="cname"/>
<association property="teacher" javaType="one.to.one.Teacher">
<id column="tid" property="tid"></id>
<result column="tname" property="tname"/>
</association>
</resultMap>
<!--
方式一:嵌套结果:使用嵌套结果映射来处理重复的联合结果的子集
封装联表查询的数据(去除重复的数据)
select * from teacher t,classes c where t.cid = c.cid and t.cid=#{cid}
-->
<select id="getTeacher" resultMap="getTeacherMap" parameterType="int">
select * from teacher t,classes c
where t.cid = c.cid and t.cid=#{cid}
</select>
<resultMap type="one.to.one.Teacher" id="getTeacherMap">
<id column="tid" property="tid"/>
<result column="tname" property="tname"/>
<association property="classes" javaType="one.to.one.Classes">
<id column="cid" property="cid"/>
<result column="cname" property="cname"/>
</association>
</resultMap> <!--
方式二:嵌套查询:通过执行另外一个SQL映射语句来返回预期的复杂类型
SELECT * FROM classes WHERE cid=1;
SELECT * FROM teacher WHERE tid=1 //1 是上一个查询得到的tid的值
property:别名(属性名) column:列名 -->
<!-- 把teacher的字段设置进去 -->
<select id="getClasses2" resultMap="getClassesMap2">
select * from classes c where c.cid = #{cid}
</select>
<resultMap type="one.to.one.Classes" id="getClassesMap2">
<id column="cid" property="cid"/>
<result column="cname" property="cname"/>
<collection property="teacher" column="tid" select="getTeacherCollection">
</collection>
</resultMap>
<select id="getTeacherCollection" resultType="one.to.one.Teacher">
select tid tid,tname tname from teacher where tid=#{tid}
</select> </mapper>
说明:我们这里一对一的关联操作,有两种方式:
1、使用嵌套结果映射来处理重复的联合结果的子集
2、通过执行另外一个SQL映射语句来返回预期的复杂类型
相关属性解释:
④、向 mybatis-configuration.xml 配置文件中注册 classesMapper.xml 文件
⑤、编写测试类
package one.to.one; import java.io.InputStream; import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test; import com.ys.test.MyBatisTest; public class OneToOneTest {
SqlSession session; @Before
public void beforeLoadXML(){
//加载 mybatis 配置文件
InputStream inputStream = MyBatisTest.class.
getClassLoader().getResourceAsStream("mybatis-configuration.xml");
//构建sqlSession的工厂
SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder().build(inputStream);
//根据 sqlSessionFactory 产生 session
session = sqlSessionFactory.openSession();
} //一对一嵌套结果方式:根据教师id查询班级信息
@Test
public void testGetClasses(){
String statement = "one.to.one.classesMapper.getClasses";
Classes c = session.selectOne(statement, 1);
System.out.println(c);
} //一对一嵌套结果方式:根据班级id查询教师信息
@Test
public void testGetTeacher(){
String statement = "one.to.one.classesMapper.getTeacher";
Teacher t = session.selectOne(statement, 1);
System.out.println(t);
} //一对一嵌套查询方式:根据教师id查询班级信息
@Test
public void testGetClasses2(){
String statement = "one.to.one.classesMapper.getClasses2";
Classes c = session.selectOne(statement, 1);
System.out.println(c);
} }
4、MyBatis 入门实例 一对多,多对一 基于xml配置
这里我们以班级和学生为例,一个班级里面对应多个学生,这是一对多;反过来,多个学生对应一个班级,这是多对一
①、建立学生和班级的实体类
Student.java
package one.to.many; public class Student {
private int sid;
private String sname;
private Classes classes;
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public Classes getClasses() {
return classes;
}
public void setClasses(Classes classes) {
this.classes = classes;
}
@Override
public String toString() {
return "Student [sid=" + sid + ", sname=" + sname + ", classes=" + classes + "]";
} }
Classes.java
package one.to.many; import java.util.Set; public class Classes {
private int cid;
private String cname;
private Set<Student> students; public int getCid() {
return cid;
}
public void setCid(int cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
public Set<Student> getStudents() {
return students;
}
public void setStudents(Set<Student> students) {
this.students = students;
}
@Override
public String toString() {
return "Classes [cid=" + cid + ", cname=" + cname + ", students=" + students + "]";
}
}
②、在数据库中根据实体类创建相应的数据表
③、多对一:定义操作 Classes 表的sql映射文件classesMapper.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="one.to.many.classesMapper">
<select id="getClasses" resultMap="getClassesMap">
select * from classes c,student s where s.cid=c.cid and c.cid=#{cid}
</select>
<resultMap type="one.to.many.Classes" id="getClassesMap">
<id column="cid" property="cid"></id>
<result column="cname" property="cname"/>
<collection property="students" ofType="one.to.many.Student">
<id column="sid" property="sid"/>
<result column="sname" property="sname"/>
</collection>
</resultMap> </mapper>
④、一对多:定义操作 Student 表的sql映射文件studentMapper.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="many.to.one.studentMapper">
<select id="getStudents" resultMap="getStudentMap">
select * from classes c,student s where s.cid=c.cid and s.sid=#{sid}
</select>
<resultMap type="one.to.many.Student" id="getStudentMap">
<id column="sid" property="sid"></id>
<result column="sname" property="sname"/>
<association property="classes" javaType="one.to.many.Classes">
<id column="cid" property="cid"/>
<result column="cname" property="cname"/>
</association>
</resultMap> </mapper>
⑤、向 mybatis-configuration.xml 配置文件中注册 classesMapper.xml 、studentMapper.xml文件
⑥、编写测试类
package one.to.many; import java.io.InputStream; import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test; import com.ys.test.MyBatisTest; public class OneToManyTest {
SqlSession session; @Before
public void beforeLoadXML(){
//加载 mybatis 配置文件
InputStream inputStream = MyBatisTest.class.
getClassLoader().getResourceAsStream("mybatis-configuration.xml");
//构建sqlSession的工厂
SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder().build(inputStream);
//根据 sqlSessionFactory 产生 session
session = sqlSessionFactory.openSession();
} //一对多嵌套结果方式:根据班级id查询班级所有的学生信息
@Test
public void testGetClasses(){
String statement = "one.to.many.classesMapper.getClasses";
Classes c = session.selectOne(statement, 1);
System.out.println(c);
System.out.println(c.getStudents().size());
} //多对一嵌套结果方式:根据学生id查询班级信息
@Test
public void testGetStudents(){
String statement = "many.to.one.studentMapper.getStudents";
Student s = session.selectOne(statement, 1);
System.out.println(s);
System.out.println(s.getClasses());
} }
5、MyBatis 入门实例 多对多 基于xml配置
这里我们以 users 表和 groups 表为例,一个 users 可能加入多个 groups,而一个 groups 可能包含多个 users,故构成 多对多 的关联
①、在数据库中建立相应的表
users 表
groups 表
两者之间的关联表users_groups表
②、建立对应的实体类
Users.java
package many.to.many; import java.util.Set; public class Users {
private int uid;
private String uname;
private Set<Groups> groups;
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public Set<Groups> getGroups() {
return groups;
}
public void setGroups(Set<Groups> groups) {
this.groups = groups;
}
@Override
public String toString() {
return "User [uid=" + uid + ", uname=" + uname + ", groups=" + groups + "]";
} }
Groups.java
package many.to.many; import java.util.Set; public class Groups {
private int gid;
private String gname;
private Set<Users> users;
public int getGid() {
return gid;
}
public void setGid(int gid) {
this.gid = gid;
}
public String getGname() {
return gname;
}
public void setGname(String gname) {
this.gname = gname;
}
public Set<Users> getUsers() {
return users;
}
public void setUsers(Set<Users> users) {
this.users = users;
}
@Override
public String toString() {
return "Group [gid=" + gid + ", gname=" + gname + ", users=" + users + "]";
} }
Users_Groups.java
package many.to.many; public class Users_Groups {
private Users user;
private Groups group;
public Users getUser() {
return user;
}
public void setUser(Users user) {
this.user = user;
}
public Groups getGroup() {
return group;
}
public void setGroup(Groups group) {
this.group = group;
} }
③、多对多:定义操作 sql映射文件userMapper.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="many.to.many.userMapper">
<!-- 给一个用户 id,查看该用户下的所有用户组信息 -->
<select id="getUsers" resultMap="getGroupMap">
select g.gid,g.gname from users_groups ug,groups g
where ug.group_id=g.gid and ug.user_id=#{uid}
</select>
<resultMap type="many.to.many.Groups" id="getGroupMap">
<id column="gid" property="gid"/>
<result column="gname" property="gname"/>
<collection property="users" ofType="many.to.many.Users">
<id column="uid" property="uid"/>
<result column="uname" property="uname"/>
</collection>
</resultMap> </mapper>
⑤、向 mybatis-configuration.xml 配置文件中注册 userMapper.xml文件
⑥、编写测试类
//多对多:根据根据用户 id 查询所有的用户组信息
@Test
public void testGetGroups(){
String statement = "many.to.many.userMapper.getUsers";
List<Groups> listGroup = session.selectList(statement,1);
for(Groups g : listGroup){
System.out.println(g.toString());
}
}
MyBatis 详解(一对一,一对多,多对多)的更多相关文章
- MyBatis的关联关系 一对一 一对多 多对多
一对一示例 一个妻子对应一个丈夫 数据库表设计时 在妻子表中添加一个丈夫主键的作为外键 1 对应的JavaBean代码虽然在数据库里只有一方配置的外键,但是这个一对一是双向的关系. Husband实体 ...
- mybatis 一对一 一对多 多对多
一对一 一对多 多对多
- [原创]mybatis详解说明
mybatis详解 2017-01-05MyBatis之代理开发模式1 mybatis-Dao的代理开发模式 Dao:数据访问对象 原来:定义dao接口,在定义dao的实现类 dao的代理开发模式 只 ...
- mybatis 详解(三)------入门实例(基于注解)
1.创建MySQL数据库:mybatisDemo和表:user 详情参考:mybatis 详解(二)------入门实例(基于XML) 一致 2.建立一个Java工程,并导入相应的jar包,具体目录如 ...
- mybatis 详解------动态SQL
mybatis 详解------动态SQL 目录 1.动态SQL:if 语句 2.动态SQL:if+where 语句 3.动态SQL:if+set 语句 4.动态SQL:choose(when,o ...
- JPA级联(一对一 一对多 多对多)注解【实际项目中摘取的】并非自己实际应用
下面把项目中的用户类中有个:一对一 一对多 多对多的注解对应关系列取出来用于学习 说明:项目运行正常 问题类:一对多.一对一.多对多 ============一对多 一方的设置 @One ...
- Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作
Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作,单表查询,多表查询 一丶表与表之间的关系 背景: 由于如果只使用一张表存储所有的数据,就会操作数 ...
- mybatis 详解(七)------一对一、一对多、多对多
前面几篇博客我们用mybatis能对单表进行增删改查操作了,也能用动态SQL书写比较复杂的sql语句.但是在实际开发中,我们做项目不可能只是单表操作,往往会涉及到多张表之间的关联操作.那么我们如何用 ...
- MongoDB开发深入之一:文档数据关系模型详解(一对多,多对多)
文档关联模型通常有3种方式: 嵌入式(一对一.一对多) 后期手动统一ID处理(一对多.多对多) References引用(一对一.一对多) 文档树模型通常有3种方式: 父引用(Parent Refer ...
随机推荐
- Linux SSH安全技巧
SSH服务器配置文件是/etc/ssh/sshd_conf.在你对它进行每一次改动后都需要重新启动SSH服务,以便让改动生效. 1.修改SSH监听端口默认情况下,SSH监听连接端口22,攻击者使用端口 ...
- SICP-Elements of program
编程语言=组合简单形成复杂的工具 简单的声明和表达式 简单元素之间的组合方式 组合后元素的抽象方式 程序=数据+函数 数据是我们要处理的内容 函数是我们处理数据的方式 函数式与中缀式 函数式不会出现歧 ...
- PHP中常量和变量的区别
1.常量只能赋一次值: 以下是申请常量的两种方法: const THE_VALUE="one"; define("THE_VALUE","one&qu ...
- 关于java反射获取泛型
public class Test<T> { private final TypeToken<T> typeToken = new TypeToken<T>(get ...
- 增强学习 | AlphaGo背后的秘密
"敢于尝试,才有突破" 2017年5月27日,当今世界排名第一的中国棋手柯洁与AlphaGo 2.0的三局对战落败.该事件标志着最新的人工智能技术在围棋竞技领域超越了人类智能,借此 ...
- 关于MATLAB处理大数据坐标文件201763
目前已经找出26条特征 ,但是提交数据越来越少,给我的感觉是随机森林画的范围越来越小,输出的机器数据也越来越少,我自认为特征没太大问题 我已经将不懂之处列了出来,将于明天咨询大师级人物
- js脚本中try与cache捕获异常处理
<script type="text/javascript"> function add_reason(elm){ try{ var pp=$('.pp').val() ...
- React 在服务端渲染的实现
原文地址:Server-Side React Rendering 原文作者:Roger Jin 译者:牧云云 React 在服务端渲染的实现 React是最受欢迎的客户端 JavaScript 框架, ...
- 4.vbs的循环,switch,判断等语句
1.条件判断语句 If Then Else Sub judge(x) Then MsgBox "the num is 0" Then MsgBox "the num is ...
- HTML基本结构与标签总结整理篇
HTML基本结构与标签总结整理篇 前言:这是笔者的学习总结与整理,如果有错误或疑问的地方,欢迎指正与讨论!另:此文会不定时更新~ 1.了解HTML 学习前端技术,必然涉及三个方面:html(结构).c ...