发表于: 2017-11-19 22:28:08

1 654


今天完成的事情:


①早上补了一下基础的东西,看了一下网络与线程的入门.


写了一个本地的简单servert跑了一下

package basic;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

/**
* @author Arike
* Create_at  2017/11/19 10:52
*/
public class ServertDemo {
static String[] sarr = {"say hello", "I love you", "good night"};
   public static void run() throws IOException {
ServerSocket seversocket = new ServerSocket(5000);
       
       while(true){
Socket socket = seversocket.accept();
           PrintWriter writer = new PrintWriter(socket.getOutputStream());
           writer.println(geradvice());
           writer.println(geradvice());
           writer.println(geradvice());
           writer.close();
       }
}

private static String geradvice() {
return sarr[(int) (Math.random() * sarr.length)];
   }

public static void main(String[] args) throws IOException {
ServertDemo t =new ServertDemo();
       t.run();
   }
}


客户端 client

package basic;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;

/**
* @author Arike
* Create_at  2017/11/19 11:01
*/
public class Client {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("127.0.0.1", 5000);
       InputStreamReader isr = new InputStreamReader(socket.getInputStream());
       BufferedReader br = new BufferedReader(isr);
       System.out.println(br.readLine());
       System.out.println(br.readLine());
       System.out.println(br.readLine());
       br.close();
   }
}


②继续Mybatis的学习,增加CRUD的功能

 1.根据用户名称模糊查询用户信息

<mapper namespace="test">
   <!-- 省略其他 -->
   <!-- 根据用户名称模糊查询用户信息,可能返回多条 -->
   <select id="findUserByName" parameterType="java.lang.String" resultType="mybatis.po.User">
       select * from user where username like '%${value}%'
</select>
</mapper>

 2.添加用户

<mapper namespace="test">

   <!-- 省略不相关配置 -->

   <!-- 添加用户 -->
   <insert id="insertUser" parameterType="mybatis.po.User">
       insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})

<!-- 将插入数据的主键返回,返回到user对象中 -->
       <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
           select last_insert_id()
</selectKey>

       <!--
       <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
           select uuid()
       </selectKey>
        -->
   </insert>
</mapper>

3.更新和删除

<mapper namespace="test">

   <!-- 省略不相关配置 -->

   <!-- 删除用户 -->
   <delete id="deleteUser" parameterType="java.lang.Integer">
       delete from user where id=#{id}
</delete>

   <!-- 更新用户 -->
   <update id="updateUser" parameterType="mybatis.po.User">
       update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}
</update>

</mapper>


增删改查汇总一下:

<?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="mapper">
   <select id="getStudentById" parameterType="long" resultType="Student">
       select * from `t_student` where id = #{id}
</select>
   <select id="getStudentByName" parameterType="String" resultType="Student">
       SELECT * FROM `t_student` WHERE name like #{name}
</select>
   <update id="updateStudent" parameterType="Student">
       UPDATE `t_student` SET name = #{name},age = #{age} WHERE id = #{id}
</update>
   <insert id="insertStudent" parameterType="Student">
       INSERT INTO `t_student`(name,age)VALUES (#{name},#{age})
<!-- 将插入数据的主键返回,返回到user对象中 -->
       <selectKey keyProperty="id" order="AFTER" resultType="long">
           select last_insert_id()
</selectKey>
   </insert>
   <delete id="deleteStudent" parameterType="long">
       DELETE FROM `t_student` WHERE id=#{id}
</delete>
</mapper>


测试类:

package com.Mybatis;

import com.Mybatis.bean.Student;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;


import java.io.Reader;
import java.util.List;

/**
* @author Arike
* Create_at  2017/11/20 9:38
*/
public class Test {
//声明SQL语句工厂对象
   private static SqlSessionFactory sqlSessionFactory;
   //声明reader
   private static Reader reader;
   //声明执行对话对象
   private static SqlSession sqlsession;
   static {
try {
reader = Resources.getResourceAsReader("config.xml");
           sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
           sqlsession = sqlSessionFactory.openSession();
       } catch (Exception e) {
e.printStackTrace();
       }
}

public static void main(String[] args) {
//selectone(39);
       //delete(40);
       //update(new Student(40L,"古尘",15));
        insert(new Student("剑飞",19));
      // selectAll("_");
   }

//增加
   private static void insert(Student student) {
sqlsession.insert("mapper.insertStudent", student);
       sqlsession.commit();
       sqlsession.close();
       System.out.println("本次数据ID"+student.getId());
   }

//通过名称模糊查询
   private static void selectAll(String s ) {
List<Student> list = sqlsession.selectList("mapper.getStudentByName",s );
       System.out.println(list);
       sqlsession.close();
   }

//更新
   private static void update(Student s) {
sqlsession.update("mapper.updateStudent", s);
       sqlsession.commit();
       sqlsession.close();
   }
//删除
   private static void delete(long id){
sqlsession.delete("deleteStudent",id);
       sqlsession.commit();
       sqlsession.close();
   }
//根据ID查找
   private static void selectone(long id){
Student s =sqlsession.selectOne("getStudentById", id);
       System.out.println(s);
       sqlsession.close();
   }
}


关于insert在XML中有可以返回主键ID语句

<selectKey keyProperty="id" order="AFTER" resultType="long">
   select last_insert_id()
</selectKey>


4 <selectKey>标签:用来返回插入数据的主键的,实际中如果有获得主键的需要就可以使用它。

5 select last_insert_id():是sql函数,表示得到刚刚insert进去记录的主键值,只适用于自增主键。

6 keyProperty:表示将查询到主键值设置到上面parameterType指定的对象的哪个属性。

7 order:表示select last_insert_id()的执行顺序,是相对于insert语句来说的。



明天计划的事情:

继续Mybatis动态SQL的学习,以及log4j的了解.

遇到的问题:

对XML里面的很多的定义还是搞不清楚,

<mapper namespace="test">

这个mapper namespace 定义的作用还不是很清楚,查看了一波资料,说的是直接写DAO接口,可以不用写实现类,但是我这边是直接将mapper.XML去掉.XML写进去,不然就会一直报错


收获:

了解到了简单网络端口连接的写法,会在Mybatis中使用CRUD.


禅道:http://task.ptteng.com/zentao/project-burn-414.html


返回列表 返回列表
评论

    分享到